首先,我想将此答案归功于一位匿名 Stack Overflow 用户 - 我很确定我之前在这里看到过类似的答案 - 但现在我找不到它。
将本地 JAR 文件作为依赖项的最佳选择是创建本地 Maven 存储库。这样的存储库只不过是一个包含 pom 文件的适当目录结构。
举个例子:我的主项目在 ${master_project}
location 上,子项目 1 在 ${master_project}/${subproject1}
.
然后我在以下位置创建一个 Maven 存储库: ${master_project}/local-maven-repo
.
在位于的 subproject1 中的 pom 文件中 ${master_project}/${subproject1}/pom.xml
,需要指定存储库,它将文件路径作为 URL 参数:
<repositories>
<repository>
<id>local-maven-repo</id>
<url>file:///${project.parent.basedir}/local-maven-repo</url>
</repository>
</repositories>
可以像指定任何其他存储库一样指定依赖项。这使您的 pom 存储库独立。例如,一旦所需的 JAR 在 Maven 中心可用,您只需将其从本地存储库中删除,它将从默认存储库中提取。
<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 仓库来托管一个无法发布的 JAR 更好。