将本地依赖项添加到 Maven 项目的最佳方法

Best way to add local dependency to Maven project

对此有很多疑问,但答案似乎相互矛盾。所以我想问一下我的Maven版本(3.0.4)。

我有一个不属于任何 Maven 存储库的 JAR 文件。这是一个本地依赖项。我知道有两种方法可以将它添加到我的 Maven 项目中。

  1. 将其添加为依赖项并在<systemPath> 属性中指定文件路径。 (不需要其他工作。)
  2. 创建本地存储库 <my-project>/repo 并在此存储库中安装 JAR。然后,在我的 pom.xml 文件中添加新的存储库并添加新的依赖项。

我很好奇哪种方法更好?我听说过一些关于 <systemPath> 属性 的负面消息,尽管那样看起来更快。

您可以将 jar 添加到本地 maven 存储库。通常它位于:

$home_directory/.m2/repository 

例如你有 expample.jar 并且你想将它添加到你的 pom 中:

<dependency>
    <groupId>com.example</groupId>
    <artifactId>example</artifactId>
    <version>1.0</version>
</dependency>

那么你必须将example.jar添加到:

$home_directory/.m2/repository/com/example/1.0/example.jar

在我的例子中,NetBeans 帮我做了。

答案是,这取决于...

  1. 如果将它添加为系统依赖项,它很可能会成为路径依赖项,这使得它更难在其他开发人员之间共享。当然,您也可以通过 SCM 分发与 POM 相关的第 3 方 jar,但 systemPath 的目的更多是针对 JDK 或 VM 提供的依赖项。来自 the docs 关于 systemPath:

    They are usually used to tell Maven about dependencies which are provided by the JDK or the VM. Thus, system dependencies are especially useful for resolving dependencies on artifacts which are now provided by the JDK, but where available as separate downloads earlier.

  2. 在本地repo安装jar也不利于分享。它要求所有开发人员在构建之前将 jar "upload" 放到他们的本地仓库中。您当然可以添加一个脚本来为您处理这个问题,但是忘记上传总是很容易,IMO 更好的解决方案是下面的第 3 点。本地安装过程为described here.

  3. 如果您在开发人员共享 POM 的组织中工作,您应该将第 3 方 jar 上传到本地存储库管理器。这样你就可以像使用任何其他启用 maven 的 jar 一样轻松地使用 3rd 方 jar。检查 this link 以获取有关存储库管理器的完整列表。

总而言之,如果您要与其他人共享 POM,我建议您将其上传到本地存储库管理器。否则,第二个选项可以为您工作。作为最后的选择,我会回到选项 1。

另请注意,这与您使用的 Maven 版本无关运行。

到目前为止我看到的最好的方法是使用 install:install-file 目标和 Maven。您可以使用 mvn 命令行直接使用适当的参数执行它,或者如果您使用的是 eclipse EE,则可以通过利用嵌入式 maven 并创建一个 运行 配置来执行此操作,如下所示:

然后,您按如下方式包含 jar:

    <dependency>
        <groupId>mylocal.weka</groupId>
        <artifactId>weka</artifactId>
        <version>1.0</version>
    </dependency>

当然可以根据自己的需要调整参数。

最好的, 海瑟姆