【问题标题】:Shipping a pom.xml that says the jar includes the dependencies发送一个 pom.xml,说明 jar 包含依赖项
【发布时间】:2016-01-22 23:02:41
【问题描述】:

我有一个使用 Apache Commons IO 依赖项的开源项目。

我不使用Maven构建,只使用Ant,最后jar包含Apache Commons IO依赖:目的是用户不需要设置CLASSPATH
所以二进制版本只包含 一个 jar。假设它的名字是project-1.0.jar

现在我想将我的项目包含在 Maven Central 中。

我创建了一个 pom.xml,其中包含编译所需的 Commons IO 依赖项:

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
</dependency>

然后像往常一样,我将project-1.0.jarproject-1.0-sources.jarproject-1.0-javadoc.jar 发送给 Sonatype。

如何在pom.xml 中声明project-1.0.jar 已经 包含依赖项?

这样做是否可能/合法?
如果没有,其他选择是什么?

(我想为 Maven 用户和非 Maven 用户保持相同的构建,以简化构建、测试和维护。)

谢谢,
妮可

【问题讨论】:

  • 别那样做。你的 jar 应该包含你的类,并且只包含你的类。作为用户,我可能需要在您的库中使用另一个版本的 commons-io。我什至不确定您是否可以在 Maven Central 上您自己的库中重新分发 commons-io。 Maven 的重点是为您设置类路径。因此,对于使用 Maven 的开发人员来说,设置类路径不是问题。
  • 谢谢,这很有说服力。您可以将其发布为答案吗?
  • 如果你真的有这样一个用例,在这种情况下你以某种方式与第三方库的特定版本绑定在一起,那么将这个库重新打包并内化到你的库中可能是有意义的。自己的源代码。用您自己的前缀为其所有包添加前缀,并将源代码放入项目的源代码树中。
  • @David,谢谢,但这不是我的问题。

标签: maven ant dependencies pom.xml sonatype


【解决方案1】:

POM Reference, Dependencies:

  • 范围:
    ...
    • ...
    • provided - 这很像编译,但表示您希望 JDK 或容器在运行时提供它。它仅在编译和测试类路径中可用,并且不可传递。
    • ...

【讨论】:

    【解决方案2】:

    在这个简单的情况下,只需使用定义 commons-io 作为依赖即可。其余的将由 maven 处理。我也可以建议您开始使用 Maven,这也会让您的生活更轻松。

    【讨论】:

      猜你喜欢
      • 2017-02-08
      • 1970-01-01
      • 1970-01-01
      • 2014-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-16
      • 2023-03-30
      相关资源
      最近更新 更多