我了解您是在专门询问 ceylon import-jar 工具,但如果您的目标是从远程存储库导入 jar,则希望提供一种更容易的不同解决方案。
我建议你使用我写的Ceylon Gradle Plugin 。
它知道如何从存储库(包括 JCenter 和 Maven Central,但还有许多其他)中获取依赖项,它会自动为您运行 ceylon -import-jar 工具。
完整示例:
- 运行以下命令以创建一个新的测试项目(输入
simple
文件夹名称):
ceylon new simple --module-name=com.athaydes.test --module-version=1.0
- 输入新项目名称并查看其中的内容(最低 Ceylon 项目):
cd simple
tree # or use Finder, Window Explorer or whatever
你会看到这个:
└── 来源
└── com
└── athaydes
└── 测试
├── 模块.ceylon
├── package.ceylon
└── run.ceylon
- 编辑
module.ceylon
使其具有以下内容(添加您想要的任何依赖项):
模块 com.athaydes.test "1.0" {
本机(“jvm”)
导入joda_time.joda_time“2.9.4”;
}
请注意,模块的名称必须是有效的锡兰标识符!因此,Gradle 插件将无效字符替换为_
,从 Maven 工件名称生成有效的 Ceylon 标识符。
- 在项目的根目录下创建一个 build.gradle 文件,以便 Gradle 插件可以工作,其内容如下:
插件{
id "com.athaydes.ceylon" 版本 "1.2.0"
}
存储库{
中心()
}
锡兰{
模块=“com.athaydes.test”
flatClasspath = false
进口罐=真
forceImports = true // 必须绕过 Maven poms 中的可选依赖问题
}
依赖{
锡兰编译“乔达时间:乔达时间:2.9.4”
}
我们必须在这里将这个依赖声明为普通的 Maven 依赖,以便 Gradle 知道从哪里获取 Jars。
- 完成...现在只需运行 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
jar 将被导入到默认位置,modules
(但您可以对其进行配置):
── 建造
│ ├── 依赖项
│ │ └── joda-time-2.9.4.pom
│ ├── maven-repository
│ │ └── joda-time
│ │ └── joda-time
│ │ └── 2.9.4
│ │ ├── joda-time-2.9.4.jar
│ │ └── joda-time-2.9.4.pom
│ ├── maven-settings.xml
│ └── 模块描述符
│ └── 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.properties
└── 来源
└── com
└── athaydes
└── 测试
├── 模块.ceylon
├── package.ceylon
└── run.ceylon
现在您可以使用该任务运行 Ceylon 代码runCeylon
(或者仅run
当没有其他具有此名称的任务时):
gradle run
注意:
不幸的是,实际上将您选择的特定 Jar 导入到 Ceylon 存储库中是不可能的,因为它的原始名称是……因为在 Ceylon 中,joda-time
是一个非法标识符……所以你需要在 Ceylon 导入时更改模块的名称。Gradle 插件为您完成了它.. 但您需要知道有效标识符是什么才能在模块文件中写入导入语句(您可以让插件运行,它会告诉您名称将是什么)。
一个更简单的方法
如果你想避免这种方法的复杂性,你可以只使用默认的 Gradle 插件方法来不将 Maven jar 导入 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";
}
请注意,我们不需要使用这种方法弄乱依赖项名称。从 Ceylon 1.2.3 开始,您应该在依赖项前面加上maven:
限定符以避免警告。
就这么简单!