1

如何使用 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"

但据我所知,该工具不起作用(锡兰版本 1.2.2 和 1.2.3)。

使用 Maven Central 是必不可少的。

这个问题与锡兰复制工具有关,因为这两种工具都给我一个谜语。

4

2 回答 2

1

我了解您是在专门询问 ceylon import-jar 工具,但如果您的目标是从远程存储库导入 jar,则希望提供一种更容易的不同解决方案。

我建议你使用我写的Ceylon Gradle Plugin 。

它知道如何从存储库(包括 JCenter 和 Maven Central,但还有许多其他)中获取依赖项,它会自动为您运行 ceylon -import-jar 工具。

完整示例:

  1. 运行以下命令以创建一个新的测试项目(输入simple文件夹名称):

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

  1. 输入新项目名称并查看其中的内容(最低 Ceylon 项目):

cd simple

tree # or use Finder, Window Explorer or whatever

你会看到这个:

    └── 来源
        └── com
            └── athaydes
                └── 测试
                    ├── 模块.ceylon
                    ├── package.ceylon
                    └── run.ceylon
  1. 编辑module.ceylon使其具有以下内容(添加您想要的任何依赖项):
    模块 com.athaydes.test "1.0" {
      本机(“jvm”)
      导入joda_time.joda_time“2.9.4”;
    }

请注意,模块的名称必须是有效的锡兰标识符!因此,Gradle 插件将无效字符替换为_,从 Maven 工件名称生成有效的 Ceylon 标识符。

  1. 在项目的根目录下创建一个 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。

  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

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:限定符以避免警告。

就这么简单!

于 2016-09-01T07:53:13.453 回答
0

1.作为对我的问题的(部分)回答,结果证明这是有效的:

$ ../bin/ceylon import-jar --rep flat:"../flat/" Jama/1.0.3 ../flat/Jama-1.0.3.jar

我手动下载了 jar(在本例中为 Jama-1.0.3.jar),然后我可以导入它。

我不得不尝试很多来找出将前缀“flat:”放在哪里,即要么将其放在模块描述符“module.ceylon”中的“import”之后,要么放在命令行上。事实证明,后者是正确的选择。

但是,我仍然无法找到如何使用 import-jar 工具直接从 maven 导入 jar。

2. 管理模块需要更详细的文档。具体来说,应该澄清术语“遗留存储库”的含义。

“遗留”是否意味着“弃用”?

3. 我希望以下将依赖项导入项目的方式不被视为“遗留”或“弃用”:

a) 重命名 jar 文件,使名称反映 jar 内的压缩目录结构。

b) 将 jar 放入一个目录结构中,该目录结构再次反映了 jar 中的目录结构。

c)将所有内容放入项目的模块目录中,必要时合并目录。

这似乎是将依赖项包含到项目中的最明确和最可靠的方式,我希望这种方式在任何时候都不会被弃用或被视为“遗留”。

于 2016-07-30T07:29:50.667 回答