1

我正在使用 ceylon 版本 1.2.3 的 ceylon copy 命令下载依赖项:

./bin/ceylon copy --rep  "http://repo.maven.apache.org/maven2/" -out outdir "joda-time:joda-time/2.9.4"

为什么工具跳过下载它的结果?

Module joda-time:joda-time/2.9.4 [1/1]) Skipped.

该工具看起来 - 除其他外 - 用于:

http://repo.maven.apache.org/maven2//joda-time:joda-time/2.9.4/joda-time:joda-time-2.9.4.jar 

...但它应该寻找:

http://repo.maven.apache.org/maven2/joda-time/joda-time/2.9.4/joda-time-2.9.4.jar

从逻辑上讲,以下应该可以工作:

./bin/ceylon copy --rep  "http://repo.maven.apache.org/maven2/" --out here --verbose --jvm "joda-time/2.9.4"

...但它告诉我:

... Module joda-time/2.9.4 not found ...

...类似地:

./bin/ceylon copy --rep  "http://repo.maven.apache.org/maven2/" --out here --verbose --jvm "joda-time-2.9.4.jar"

... 与:

./bin/ceylon copy --rep  "http://repo.maven.apache.org/maven2/" --out here --verbose --jvm "joda-time-2.9.4"

如何使复制工具正确构建 url 并将模块下载到我的本地存储库?

4

2 回答 2

1

这里真正正确的答案是复制工具不是用来复制 Maven 模块的。

复制工具的整个想法是,您有一个已经编译的模块,可能带有依赖项,并且您希望将其复制到其他存储库以便能够在那里运行它。根据您的用例,您可能希望在复制时包含它的依赖项。

在这种情况下,复制 Maven 模块并没有多大意义,因为 a) 它们会以某种方式从 Maven 模块转换为 Ceylon 模块(这并不总是一个简单的过程,这就是为什么我们有一个特殊的工具ceylon import-jar来帮助你做那)。b) 同时,您的导入代码仍将引用 Maven 导入,这意味着即使复制工具复制了这些 Maven 模块,您的原始模块仍将使用 Maven 存储库中的模块!您必须更改导入并重新编译代码才能使其正常工作。

所以你遇到的错误是 Ceylon 1.2.2 甚至试图这样做。我刚刚对 1.2.3 复制工具进行了更改,它总是会跳过任何不是来自 Ceylon 存储库的模块。它的文档已经更新以明确这一点。

谢谢让我们注意到这个!

于 2016-07-22T10:31:54.957 回答
0

名称中带有:的模块在 Ceylon 1.2.2+ 中被解析为 Maven 模块,因此--rep "http://repo.maven.apache.org/maven2/"是多余的。

但是,它在 1.2.2 中并没有真正起作用,因为生成的存储库包含Ceylon永远不会解析的内容(因为名称包含 a它只会尝试从 Maven 存储库而不是 Ceylon 存储库解析它)outdir/joda-time:joda-time/2.9.4/joda-time:joda-time-2.9.4.jar。所以这是一个错误。:

此外,它没有下载依赖项或具体化 amodule.xml来描述它们,所以这是另一个错误。

现在,如果您在 Ceylon 1.2.3 (git master) 中尝试它,它会说Skipped,这可能是由于我们为 Maven 导入添加了命名空间,因此语法可能是maven:joda-time:joda-time/2.9.4(它实际上是在不断变化的 ATM)。除非你尝试你会得到一个异常,所以这是第三个错误。

请问可以举报吗?https://github.com/ceylon/ceylon/issues/new

于 2016-07-22T09:39:51.500 回答