【问题标题】:The ceylon copy tool锡兰复制工具
【发布时间】:2016-08-02 01:04:02
【问题描述】:

我正在使用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 并将模块下载到我的本地存储库?

【问题讨论】:

  • 这是锡兰的哪个版本?
  • 锡兰版本是1.2.3,昨天的夜间版本。哦,我刚刚尝试了 1.2.2 版本(因为您要求版本)并且它有效。我必须道歉,我应该在之前尝试过......但我尝试了最新版本。因此,如果有的话,这可能是一个 git hub 问题......
  • 我仍然不清楚是否打算将罐子命名(中间带有“:”的名称)“joda-time:joda-time/2.9.4/joda-time: joda-time-2.9.4.jar”,我宁愿期待“joda-time/joda-time/2.9.4/joda-time-2.9.4.jar”。

标签: copy ceylon


【解决方案1】:

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

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

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

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

感谢您提请我们注意!

【讨论】:

  • 用一个新问题编辑我的原始答案似乎有点讨厌。但这是我删除的编辑:
  • > 如果 import-jar 应该完成这项工作,那么 "./bin/ceylon import-jar --rep "repo.maven.apache.org/maven2/"; --out outdir "joda-time:joda-time/2.9.4" "joda-time-2.9.4.jar" 应该可以工作。但它没有。回答:因为import-jar 不是这样工作的,看来你一直在发明语法没有给出这样的例子或文档的地方:)
  • 正如@fromage 在对他的回答的评论中提到的,import-jar 工具目前没有从 Maven 下载任何东西。但这会很有用,因此在此处跟踪对该功能的请求:github.com/ceylon/ceylon/issues/2401
【解决方案2】:

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

但是,它在 1.2.2 中并不能真正工作,因为生成的存储库包含 outdir/joda-time:joda-time/2.9.4/joda-time:joda-time-2.9.4.jar,这是永远将由 Ceylon 解析的(因为名称包含 : 它会只尝试从 Maven 回购解决它,而不是锡兰回购)。所以这是一个错误。

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

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

你能举报他们吗? https://github.com/ceylon/ceylon/issues/new

【讨论】:

  • “另外,它没有下载依赖项”,您需要为此传递--with-dependencies
  • 实际上,这个命令是为了复制 Ceylon 存储库,而不是 Maven 存储库。它可以工作,但我们必须首先定义它应该如何工作。通常您只需在模块描述符中导入模块,您根本不必复制 Maven 存储库。如果您想将 Maven 模块导入 Ceylon 存储库,您应该查看 ceylon import-jar 命令,尽管 ATM 不会将 jar 查找到 Maven 存储库中。如果您提出问题,我们可以扩展它来做到这一点。
  • ceylon import-jar 甚至不会从任何类型的存储库中查找和导入 jar。它根本不导入任何罐子!它不工作。它不识别 --verbose 标志,而识别 -d 标志。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多