【问题标题】:Jar configurations and their contentsJar 配置及其内容
【发布时间】:2012-03-12 08:09:36
【问题描述】:

在下载 Google Guice 时,我注意到他们的downloads page 上有两种主要的“类型”工件:

  • guice-3.0.zip;和
  • guice-3.0-src.zip

在下载它们并检查它们的内容后,它们似乎是 Guice 3.0 版本的两个完全不同的“观点”。

guice-3.0.zip 只包含 Guice jar 及其依赖项。然而,guice-3.0-src.zip 不包含实际的 Guice jar,但它确实包含了各种其他优点:javadocs、示例等。

所以这让我想到:在 Java 项目中发布的 jar 必须有不同的“配置”。将这个想法与我从 Ivy(它具有工件 配置 的概念)和 Maven(它具有工件 范围 的概念)之类的构建工具所了解的知识相结合,我是想知道工件配置/范围和最终交付物(jar)之间的关系是什么。

假设我正在制作一个名为 my-utils.jar 的实用程序 jar。在其 Ivy 描述符中,我可以将 log4j 作为编译时依赖项,将 junit 作为测试依赖项。然后我可以指定在构建时解决这两个“配置”中的哪一个。

我想知道的是:这些配置和最终结果产生的jar内容之间的“映射”是什么?

例如,我可能将我所有的compile 配置依赖项打包到主my-utils.jar 中,但是有没有理由将我的test 依赖项打包到my-utils-test.jar 中? my-utils-src.jar 中会包含什么样的依赖关系?

我知道这些都是很多小问题,所以我想你可以总结如下:

  • 对于一个大项目,放出来的jar的典型品种有哪些(如guice-3.0.zip vsguice-3.0-src.zip等),各自的典型内容是什么,又如何映射回概念常春藤配置或 Maven 范围?

【问题讨论】:

    标签: java deployment maven jar ivy


    【解决方案1】:

    你需要运行的是guice-3.0.zip。它在正确的包结构中有.class 文件。

    另一个 JAR,guice-3.0-src.zip,有 .java 源文件和其他你可能会觉得有用的东西。像 IntelliJ 这样的智能 IDE 可以使用源 JAR 让您通过调试器单步执行 Guice 代码并查看发生了什么。

    您还可以通过阅读 Guice 源代码学到很多东西。它有助于了解比你我更聪明的开发人员如何编写代码。

    我想说我发现的最好的例子是 Google Code 上的 Efficient Java Matrix Library。它有一个广泛的 JUnit 测试套件,它与源代码、文档以及您需要的所有其他内容一起提供。我认为这是最令人印象深刻的。我想自己模仿一下。

    【讨论】:

    • 感谢 duffymo - 我将测试依赖项、单元测试等放入 my-utils-test.jar 的想法怎么样? Java 应用程序是否会从发布自身的“测试”版本中受益,以便下游项目可以使用他们的“测试 jar/配置”(而不是普通/主要的)来模拟和测试替身?
    • 通过最后一条评论,我的意思是:如果有一个log4j-2.16-test.jar,您可以在其中针对相同的 log4j API 进行编码,但不会获得任何生产日志文件,这不是很好吗命中?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多