Цейлонский копировальный инструмент

Я использую команду ceylon для копирования ceylon версии 1.2.3 для загрузки зависимости:

./bin/ceylon copy --rep  "http://repo.maven.apache.org/maven2/" -out outdir "joda-time:joda-time/2.9.4"

Почему в результате инструмент пропускает загрузку?

Module joda-time:joda-time/2.9.4 [1/1]) Skipped.

Инструмент ищет - среди прочего - для:

http://repo.maven.apache.org/maven2//joda-time:joda-time/2.9.4/joda-time:joda-time-2.9.4.jar 

... но он должен искать:

http://repo.maven.apache.org/maven2/joda-time/joda-time/2.9.4/joda-time-2.9.4.jar

По логике должно работать следующее:

./bin/ceylon copy --rep  "http://repo.maven.apache.org/maven2/" --out here --verbose --jvm "joda-time/2.9.4"

... но это говорит мне:

... Module joda-time/2.9.4 not found ...

... аналогично с:

./bin/ceylon copy --rep  "http://repo.maven.apache.org/maven2/" --out here --verbose --jvm "joda-time-2.9.4.jar"

... и с:

./bin/ceylon copy --rep  "http://repo.maven.apache.org/maven2/" --out here --verbose --jvm "joda-time-2.9.4"

Как я могу заставить инструмент копирования правильно построить URL и загрузить модуль в мой локальный репозиторий?

2 ответа

Решение

На самом деле правильный ответ здесь заключается в том, что инструмент копирования не предназначен для копирования модулей Maven.

Вся идея инструмента копирования заключается в том, что у вас уже есть скомпилированный модуль, возможно, с зависимостями, и вы хотите скопировать его в какой-то другой репозиторий, чтобы иметь возможность запускать его там. В зависимости от вашего варианта использования вы можете включить его зависимости при копировании или нет.

В этом сценарии копирование модулей Maven не имеет особого смысла, потому что а) они будут каким-то образом преобразованы из модулей Maven в модули Цейлона (это не всегда тривиальный процесс, и поэтому у нас есть специальный инструмент ceylon import-jar чтобы помочь вам сделать это). И б) в то же время ваш импортирующий код будет по-прежнему ссылаться на импорт Maven, что означает, что даже если бы инструмент копирования скопировал эти модули Maven, ваш оригинальный модуль все равно использовал бы модули из репозитория Maven! Вам придется изменить импорт и перекомпилировать код, чтобы сделать эту работу.

Итак, ошибка, с которой вы столкнулись - это Цейлон 1.2.2, даже пытаясь это сделать. Я только что внес изменение в инструмент копирования 1.2.3, где он всегда будет пропускать любые модули, которые не приходят из репозитория Ceylon. Его документация была обновлена, чтобы прояснить это.

Спасибо, что сообщили нам об этом!

Модули с : в их именах разрешены модули Maven в Ceylon 1.2.2+, поэтому --rep "http://repo.maven.apache.org/maven2/" это лишнее.

Тем не менее, это не очень работает в 1.2.2, потому что результирующий репозиторий содержит outdir/joda-time:joda-time/2.9.4/joda-time:joda-time-2.9.4.jar который никогда не будет решен Цейлоном (потому что имя содержит : он будет пытаться разрешить его только из репозиториев Maven, а не из репозиториев Цейлона). Так что это ошибка.

Кроме того, он не загружал зависимости или материализовал module.xml описать их, так что это еще одна ошибка.

Теперь, если вы попробуете это в Ceylon 1.2.3 (git master), он скажет Skipped и это может быть связано с тем, что мы добавили пространства имен для импорта Maven, и поэтому синтаксис может быть maven:joda-time:joda-time/2.9.4 (это действительно в потоке банкоматов). Если вы не попробуете это, вы получите исключение, так что это третий баг.

Не могли бы вы сообщить о них, пожалуйста? https://github.com/ceylon/ceylon/issues/new

Другие вопросы по тегам