Работа с цейлонской импортной банкой
Как я могу импортировать библиотеку из maven central в проект с помощью команды ceylon import-jar?
Пожалуйста, покажите полную команду.
Например, для "joda-time-2.9.4.jar" из " http://repo.maven.apache.org/maven2/" в локальный каталог.
Я думаю, это должно быть:
./ceylon-1.2.3/bin/ceylon import-jar --rep "http://repo.maven.apache.org/maven2/" --verbose --out localdir "joda-time:joda-time/2.9.4" "joda-time-2.9.4.jar"
Но, насколько я вижу, инструмент не работает (Цейлон версии 1.2.2 и 1.2.3).
Работа с Maven Central имеет важное значение.
Этот вопрос связан с инструментом копирования Цейлона, потому что оба инструмента представляют мне загадку.
2 ответа
Я понимаю, что вы спрашиваете об инструменте ceylon import-jar, но хотели бы предложить другое решение, которое будет проще, если ваша цель - импортировать jar из удаленного репозитория.
Я бы предложил вам использовать плагин Ceylon Gradle, который я написал.
Он знает, как получить зависимости из репозиториев (включая JCenter и Maven Central, но многие другие), и он автоматически запустит инструмент ceylon -import-jar.
Полный пример:
- Выполните следующую команду, чтобы создать новый тестовый проект (введите
simple
для имени папки):
ceylon new simple --module-name=com.athaydes.test --module-version=1.0
- Введите имя нового проекта и посмотрите, что в нем (минимальный проект Цейлона):
cd simple
tree # or use Finder, Window Explorer or whatever
Вы увидите это:
Source── источник Com── com Ath── athaydes Test── тест Module── module.ceylon Package── package.ceylon Run── run.ceylon
- редактировать
module.ceylon
поэтому он имеет следующее содержимое (добавьте любые зависимости, которые вы хотите):
module com.athaydes.test "1.0" { родной ("JVM") import joda_time.joda_time "2.9.4"; }
Обратите внимание, что имя модуля должно быть действительным идентификатором Цейлона! Таким образом, плагин Gradle заменяет недопустимые символы на
_
, генерируя действительный идентификатор Цейлона из имени артефакта Maven.
- Создайте файл build.gradle в корне проекта, чтобы плагин Gradle мог работать, со следующим содержимым:
плагины { id "com.athaydes.ceylon" версия "1.2.0" } репозитории { jcenter() } Цейлон { module = "com.athaydes.test" flatClasspath = false importJars = true forceImports = true // необходимо, чтобы обойти необязательные проблемы зависимостей в pom Maven } зависимости { ceylonCompile "joda-time:joda-time:2.9.4" }
Мы должны объявить эту зависимость как нормальную Maven-зависимость, чтобы Gradle знал, где взять Jar-файлы.
- Готово... теперь просто запустите importJars:
gradle importJars
Или, чтобы просто увидеть фактическую сгенерированную команду (на самом деле не будет ее запускать):
gradle -P get-ceylon-command importJars
Вот сгенерированная команда:
ceylon import-jar
--force
--descriptor=/Users/renato/programming/experiments/ceylon-gradle/simple/build/module-descriptors/joda_time_2.9.4.properties
--out=/Users/renato/programming/experiments/ceylon-gradle/simple/modules
--rep=aether:/Users/renato/programming/experiments/ceylon-gradle/simple/build/maven-settings.xml
--rep=/Users/renato/programming/experiments/ceylon-gradle/simple/modules
joda_time.joda_time/2.9.4
/Users/renato/.gradle/caches/modules-2/files-2.1/joda-time/joda-time/2.9.4/1c295b462f16702ebe720bbb08f62e1ba80da41b/joda-time-2.9.4.jar
Банки будут импортированы в папку по умолчанию, modules
(но вы можете настроить это):
── build │ ├── pom для зависимостей │ │ └── joda-time-2.9.4.pom │ ├── maven-репозиторий │ │ └── joda-time │ │ └── joda-time │ │ └── 2.9.4 │ │ ├── joda-time-2.9.4.jar │ │ └── joda-time-2.9.4.pom │ ├── maven-settings.xml │ └── модуль-дескриптор │ Oda── joda_time_2.9.4.properties ├── build.gradle ├── модули │ └── joda_time │ └── joda_time │ └── 2.9.4 │ ├── joda_time.joda_time-2.9.4.jar │ ├── joda_time.joda_time-2.9.4.jar.sha1 │ └── module.perperties └── источник └── com └── athaydes └── тест ├── module.ceylon ├── package.ceylon └── run.ceylon
Теперь вы можете запустить код Цейлона с runCeylon
задание (или просто run
если нет другой задачи с таким именем):
gradle run
ПРИМЕЧАНИЕ:
К сожалению, фактически импортировать выбранный вами Jar в репозиторий на Цейлоне невозможно с его оригинальным именем... потому что на Цейлоне joda-time
является недопустимым идентификатором... поэтому вам нужно изменить имя модуля при импорте в Цейлон. Плагин Gradle делает это за вас... но вам нужно знать, каким будет действительный идентификатор, чтобы иметь возможность записать оператор импорта в файл модуля (вы можете просто запустить плагин, и он сообщит вам, какое имя будет).
Гораздо более простой подход
Если вы хотите избежать сложности этого подхода, вы можете просто использовать подход плагина Gradle по умолчанию, чтобы НЕ импортировать файлы Maven в репозиторий Ceylon, и просто использовать простой путь к классам Java (что означает отказ от использования системы модулей Ceylon!).
Если вы сделаете это, ваш файл build.gradle будет выглядеть так:
plugins {
id "com.athaydes.ceylon" version "1.2.0"
}
repositories {
jcenter()
}
ceylon {
module = "com.athaydes.test"
}
И файл module.ceylon:
module com.athaydes.test "1.0" {
native("jvm")
import "joda-time:joda-time" "2.9.4";
}
Обратите внимание, что нам не нужно портить имя зависимости, используя этот подход. Начиная с Цейлона 1.2.3, вы должны добавить зависимость с помощью
maven:
классификатор, чтобы избежать предупреждений.
Так просто!
1. В качестве (частичного) ответа на мой вопрос это сработало:
$ ../bin/ceylon import-jar --rep flat:"../flat/" Jama/1.0.3 ../flat/Jama-1.0.3.jar
Я скачал банку (в данном случае Jama-1.0.3.jar) вручную, а затем смог импортировать ее.
Мне пришлось много пытаться выяснить, где поставить префикс "flat:", то есть либо поставить его после "import" в дескрипторе модуля "module.ceylon", либо в командной строке. Последнее оказалось правильным выбором.
Но я так и не смог выяснить, как импортировать банку из maven напрямую с помощью инструмента import-jar.
2. Требуется более подробная документация по управлению модулями. В частности, должно быть разъяснение, что означает термин "устаревшее хранилище".
Означает ли "наследие" "устаревший"?
3. Я надеюсь, что следующий способ импорта зависимостей в проект не будет считаться "устаревшим" или "устаревшим":
a) Переименуйте файл jar, чтобы имя влияло на структуру сжатых каталогов внутри jar.
б) Поместите банку в структуру каталогов, которая снова отражает структуру каталогов в банке.
c) Поместите все это в каталог модулей проекта, при необходимости объединяя каталоги.
Похоже, что это наиболее явный и надежный способ включения зависимостей в проект, и я надеюсь, что этот способ не будет считаться устаревшим или считаться "устаревшим" в любое время.