如何使用ceylon import-jar命令将Maven Central中的库导入项目?
请显示完整的命令。
例如。将“ http://repo.maven.apache.org/maven2/”中的“ joda-time-2.9.4.jar”导入本地目录。
我想一定是:
./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"
但据我所知,该工具无法正常工作(Cylon版本1.2.2和1.2.3)。
使用Maven Central至关重要。
这个问题与The ceylon copy tool关联,因为这两个工具都给我带来了一个谜。
最佳答案
我了解您是在专门询问锡兰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
您会看到以下内容:
└── source └── com └── athaydes └── test ├── module.ceylon ├── package.ceylon └── run.ceylon
- Edit
module.ceylon
so it has the following contents (add whatever dependencies you want):
module com.athaydes.test "1.0" { native("jvm") import joda_time.joda_time "2.9.4"; }
- Create a build.gradle file at the root of the project so the Gradle plugin can work, with the following contents:
plugins { id "com.athaydes.ceylon" version "1.2.0" } repositories { jcenter() } ceylon { module = "com.athaydes.test" flatClasspath = false importJars = true forceImports = true // necessary to bypass optional dependencies issues in Maven poms } dependencies { ceylonCompile "joda-time:joda-time:2.9.4" }
- Done... now just run importJars:
gradle importJars
Or, to just see the actual command generated (will not actually run it):
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 │ ├── dependency-poms │ │ └── 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 │ └── module-descriptors │ └── joda_time_2.9.4.properties ├── build.gradle ├── modules │ └── 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 └── source └── com └── athaydes └── test ├── module.ceylon ├── package.ceylon └── run.ceylon
Now you can run the Ceylon code with the runCeylon
task (or just run
if there's no other task with this name):
gradle run
注意:
不幸的是,实际上无法使用其原始名称将您选择的特定Jar导入Ceylon回购中……因为在Ceylon中,
joda-time
是非法标识符……因此,当您被Ceylon导入时,您需要更改模块的名称。 Gradle插件可以为您完成..但是您需要知道有效的标识符是什么,以便能够在模块文件中写入import语句(您可以让插件运行,它会告诉您名称是什么) )。更简单的方法
如果要避免这种方法的复杂性,可以只使用默认的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";
}
注意,我们不需要使用这种方法来弄乱依赖项名称。从Ceylon 1.2.3开始,您应该在依赖项前面加上
maven:
限定符,以避免发出警告。这么简单!