协慌网

登录 贡献 社区

如何将本地 jar 文件添加到 Maven 项目?

如何在项目的库源中直接添加本地 jar 文件(尚未成为 Maven 存储库的一部分)?

答案

您可以直接添加本地依赖项(如包含 propriatery 库的 build maven 项目中所述 ),如下所示:

<dependency>
    <groupId>com.sample</groupId>
    <artifactId>sample</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/src/main/resources/yourJar.jar</systemPath>
</dependency>

更新

在新版本中,此功能被标记为已弃用但仍在工作但尚未删除(您只需在 maven 启动期间在日志中看到警告)。 maven 小组就此问题提出了一个问题: https://issues.apache.org/jira/browse/MNG-6523 (您可以参与并说明为什么此功能在某些情况下有用)。我希望这个功能仍然存在!

如果您问我,只要不删除该功能,我就会使用它来依赖于我的项目中只有一个不适合存储库的淘气 jar 文件 。如果删除了这个功能,那么这里有很多好的答案我可以从以后选择!

将 JAR 安装到本地 Maven 存储库中,如下所示:

mvn install:install-file \
   -Dfile=<path-to-file> \
   -DgroupId=<group-id> \
   -DartifactId=<artifact-id> \
   -Dversion=<version> \
   -Dpackaging=<packaging> \
   -DgeneratePom=true

每个都指的是:

:要加载的文件的路径,例如 - > c:\ kaptcha-2.3.jar

:文件应在例如 - > com.google.code 下注册的组

:文件的工件名称,例如 - > kaptcha

:文件的版本,例如 - > 2.3

:文件的包装,例如 - > jar

参考

首先,我想对这个匿名 Stack Overflow 用户的答案给予赞扬 - 我很确定我之前已经看过类似的答案 - 但现在我找不到了。

将本地 JAR 文件作为依赖项的最佳选择是创建本地 Maven 存储库。这样的存储库只不过是一个包含 pom 文件的正确目录结构。

对于我的示例:我在${master_project}位置上有我的主项目,而 subproject1 在${master_project}/${subproject1}

然后我在: ${master_project}/local-maven-repo创建一个 Maven 存储库。

在位于${master_project}/${subproject1}/pom.xml subproject1 中的 pom 文件中,需要指定存储库,该文件将文件路径作为 URL 参数:

<repositories>
    <repository>
        <id>local-maven-repo</id>
        <url>file:///${project.parent.basedir}/local-maven-repo</url>
    </repository>
</repositories>

可以为任何其他存储库指定依赖项。这使您的 pom 存储库独立。例如,一旦所需的 JAR 在 Maven central 中可用,您只需要从本地仓库中删除它,它将从默认仓库中提取。

<dependency>
        <groupId>org.apache.felix</groupId>
        <artifactId>org.apache.felix.servicebinder</artifactId>
        <version>0.9.0-SNAPSHOT</version>
    </dependency>

最后但并非最不重要的事情是使用 - DlocalRepositoryPath 开关将 JAR 文件添加到本地存储库,如下所示:

mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file  \
    -Dfile=/some/path/on/my/local/filesystem/felix/servicebinder/target/org.apache.felix.servicebinder-0.9.0-SNAPSHOT.jar \
    -DgroupId=org.apache.felix -DartifactId=org.apache.felix.servicebinder \
    -Dversion=0.9.0-SNAPSHOT -Dpackaging=jar \
    -DlocalRepositoryPath=${master_project}/local-maven-repo

安装 JAR 文件后,可以将 Maven 存储库提交到代码存储库,整个设置与系统无关。 ( GitHub 中的工作示例 )。

我同意让 JAR 承诺源代码回购不是一个好习惯,但在现实生活中,快速和肮脏的解决方案有时比完整的 Nexus repo 更好地托管一个你无法发布的 JAR。