Работа с цейлонской импортной банкой

Как я могу импортировать библиотеку из 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.

Полный пример:

  1. Выполните следующую команду, чтобы создать новый тестовый проект (введите simple для имени папки):

ceylon new simple --module-name=com.athaydes.test --module-version=1.0

  1. Введите имя нового проекта и посмотрите, что в нем (минимальный проект Цейлона):

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
  1. редактировать module.ceylon поэтому он имеет следующее содержимое (добавьте любые зависимости, которые вы хотите):
    module com.athaydes.test "1.0" {
      родной ("JVM")
      import joda_time.joda_time "2.9.4";
    }

Обратите внимание, что имя модуля должно быть действительным идентификатором Цейлона! Таким образом, плагин Gradle заменяет недопустимые символы на _, генерируя действительный идентификатор Цейлона из имени артефакта Maven.

  1. Создайте файл 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-файлы.

  1. Готово... теперь просто запустите 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) Поместите все это в каталог модулей проекта, при необходимости объединяя каталоги.

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

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