如何将本地jar文件(还不是maven存储库的一部分)直接添加到项目的库源中?
cidc1ykv16#
依赖关系中的重要部分是:${pom.basedir}(而不仅仅是${basedir})
<dependency> <groupId>org.example</groupId> <artifactId>example</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>${pom.basedir}/src/lib/example.jar</systemPath> </dependency>
ifmq2ha217#
真正快速而肮脏的方法是指向本地文件:
<dependency> <groupId>sample</groupId> <artifactId>com.sample</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>C:\DEV\myfunnylib\yourJar.jar</systemPath> </dependency>
但是,这只会存在于您的计算机上(显然),对于共享,使用适当的m2存档(nexus/artifactory)通常是有意义的,或者如果您没有这些存档或不想设置本地maven结构化存档并在pom中配置“存储库”:本地:
<repositories> <repository> <id>my-local-repo</id> <url>file://C:/DEV//mymvnrepo</url> </repository> </repositories>
远程:
<repositories> <repository> <id>my-remote-repo</id> <url>http://192.168.0.1/whatever/mavenserver/youwant/repo</url> </repository> </repositories>
为此,还可以使用basedir变量创建相对路径:
<url>file:${basedir}</url>
y4ekin9u18#
<dependency> <groupId>group id name</groupId> <artifactId>artifact name</artifactId> <version>version number</version> <scope>system</scope> <systemPath>jar location</systemPath> </dependency>
bttbmeg019#
我想要这样的解决方案-使用 maven-install-plugin 在pom文件中:
maven-install-plugin
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-install-plugin</artifactId> <version>2.5.2</version> <executions> <execution> <phase>initialize</phase> <goals> <goal>install-file</goal> </goals> <configuration> <file>lib/yourJar.jar</file> <groupId>com.somegroup.id</groupId> <artifactId>artefact-id</artifactId> <version>x.y.z</version> <packaging>jar</packaging> </configuration> </execution> </executions> </plugin>
在这种情况下,您可以执行 mvn initialize jar将安装在本地maven repo中。现在,这个jar在这台机器上的任何maven步骤中都是可用的(不要忘记在pom中包含这个依赖项,就像其他maven依赖项一样) <dependency></dependency> 标签)。也可以将jar install绑定到not initialize 一步,但任何你喜欢的步骤。
mvn initialize
<dependency></dependency>
initialize
vohkndzv20#
比如说,创建一个新文件夹 local-maven-repo 在maven项目的基础上。只需在您的账户中添加本地回购即可 <project> 你的 pom.xml :
local-maven-repo
<project>
pom.xml
<repositories> <repository> <id>local-maven-repo</id> <url>file:///${project.basedir}/local-maven-repo</url> </repository> </repositories>
然后,对于要安装的每个外部jar,转到项目的根目录并执行:
mvn deploy:deploy-file -DgroupId=[GROUP] -DartifactId=[ARTIFACT] -Dversion=[VERS] -Durl=file:./local-maven-repo/ -DrepositoryId=local-maven-repo -DupdateReleaseInfo=true -Dfile=[FILE_PATH]
c2e8gylq21#
首先,我想把这个答案归功于一个匿名堆栈溢出用户——我很肯定我以前在这里看到过类似的答案——但现在我找不到了。将本地jar文件作为依赖项的最佳选择是创建本地maven存储库。这样的存储库只不过是一个包含pom文件的适当目录结构。举个例子:我的主项目 ${master_project} 位置和子项目1已打开 ${master_project}/${subproject1} .然后在以下位置创建maven存储库: ${master_project}/local-maven-repo .在子项目1的pom文件中,位于 ${master_project}/${subproject1}/pom.xml ,需要指定将文件路径作为url参数的存储库:
${master_project}
${master_project}/${subproject1}
${master_project}/local-maven-repo
${master_project}/${subproject1}/pom.xml
<repositories> <repository> <id>local-maven-repo</id> <url>file:///${project.parent.basedir}/local-maven-repo</url> </repository> </repositories>
可以将依赖项指定为任何其他存储库的依赖项。这使得pom存储库独立。例如,一旦所需的jar在maven central中可用,您只需从本地repo中删除它,它就会从默认repo中提取出来。
<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 repo就可以提交到一个代码存储库,整个设置是独立于系统的(github中的工作示例)。我同意让jar致力于源代码repo并不是一个好的实践,但在现实生活中,快速而肮脏的解决方案有时比一个完整的nexus repo更好,因为它承载了一个您无法发布的jar。
t98cgbkg22#
您可以直接添加本地依赖项(如build maven project中所述,包括适当的库),如下所示:
<dependency> <groupId>com.sample</groupId> <artifactId>sample</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>${project.basedir}/src/main/resources/Name_Your_JAR.jar</systemPath> </dependency>
更新在新版本中,这个特性被标记为已弃用,但仍在工作,尚未被删除(您只需在maven启动期间在日志中看到警告)。maven group对此提出了一个问题https://issues.apache.org/jira/browse/mng-6523 (您可以参与并描述为什么此功能在某些情况下有用)。我希望这个功能仍然存在!如果你问我,只要这个特性没有被删除,我就用它来依赖我的项目中一个不适合存储库的调皮jar文件。如果这个功能被删除,那么,这里有很多好的答案,我可以选择从稍后!
22条答案
按热度按时间cidc1ykv16#
依赖关系中的重要部分是:${pom.basedir}(而不仅仅是${basedir})
ifmq2ha217#
真正快速而肮脏的方法是指向本地文件:
但是,这只会存在于您的计算机上(显然),对于共享,使用适当的m2存档(nexus/artifactory)通常是有意义的,或者如果您没有这些存档或不想设置本地maven结构化存档并在pom中配置“存储库”:
本地:
远程:
为此,还可以使用basedir变量创建相对路径:
y4ekin9u18#
bttbmeg019#
我想要这样的解决方案-使用
maven-install-plugin
在pom文件中:在这种情况下,您可以执行
mvn initialize
jar将安装在本地maven repo中。现在,这个jar在这台机器上的任何maven步骤中都是可用的(不要忘记在pom中包含这个依赖项,就像其他maven依赖项一样)<dependency></dependency>
标签)。也可以将jar install绑定到notinitialize
一步,但任何你喜欢的步骤。vohkndzv20#
比如说,创建一个新文件夹
local-maven-repo
在maven项目的基础上。只需在您的账户中添加本地回购即可
<project>
你的pom.xml
:然后,对于要安装的每个外部jar,转到项目的根目录并执行:
c2e8gylq21#
首先,我想把这个答案归功于一个匿名堆栈溢出用户——我很肯定我以前在这里看到过类似的答案——但现在我找不到了。
将本地jar文件作为依赖项的最佳选择是创建本地maven存储库。这样的存储库只不过是一个包含pom文件的适当目录结构。
举个例子:我的主项目
${master_project}
位置和子项目1已打开${master_project}/${subproject1}
.然后在以下位置创建maven存储库:
${master_project}/local-maven-repo
.在子项目1的pom文件中,位于
${master_project}/${subproject1}/pom.xml
,需要指定将文件路径作为url参数的存储库:可以将依赖项指定为任何其他存储库的依赖项。这使得pom存储库独立。例如,一旦所需的jar在maven central中可用,您只需从本地repo中删除它,它就会从默认repo中提取出来。
最后但并非最不重要的事情是使用-dlocalrepositorypath开关将jar文件添加到本地存储库,如下所示:
一旦安装了jar文件,您的maven repo就可以提交到一个代码存储库,整个设置是独立于系统的(github中的工作示例)。
我同意让jar致力于源代码repo并不是一个好的实践,但在现实生活中,快速而肮脏的解决方案有时比一个完整的nexus repo更好,因为它承载了一个您无法发布的jar。
t98cgbkg22#
您可以直接添加本地依赖项(如build maven project中所述,包括适当的库),如下所示:
更新
在新版本中,这个特性被标记为已弃用,但仍在工作,尚未被删除(您只需在maven启动期间在日志中看到警告)。maven group对此提出了一个问题https://issues.apache.org/jira/browse/mng-6523 (您可以参与并描述为什么此功能在某些情况下有用)。我希望这个功能仍然存在!
如果你问我,只要这个特性没有被删除,我就用它来依赖我的项目中一个不适合存储库的调皮jar文件。如果这个功能被删除,那么,这里有很多好的答案,我可以选择从稍后!