如何使用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
  1. 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";
    }
  1. 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"
    }
  1. 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:限定符,以避免发出警告。


这么简单!

08-18 05:37