如何将本地jar文件(还不是Maven存储库的一部分)直接添加到项目的库源中?
当前回答
在我的案例中,我的现有maven构建已经在将有问题的jar文件安装到我的本地存储库中,但我没有看到预期的结果,因为本地构建会生成后缀为“-SNAPSHOT”的工件。对我来说,非常简单的解决方案是更新使用本地构建jar文件的项目的pom.xml文件,以匹配名称。
<myproject.foo.version>1.88-SNAPSHOT</myproject.foo.version>
而不是
<myproject.foo.version>1.88</myproject.foo.version>
结果是,如果您的jar文件似乎已经在local.m2/maven repo中,那么很可能是这样,您只需要相应地更新依赖关系。
其他回答
在Apache Maven 3.5.4中,我必须添加双引号。如果没有双重报价,这对我来说是行不通的。
例子:mvn安装:安装文件“-Dfile=jar文件的位置”“-DgroupId=组id”“-DastifactId=工件id”“-D版本=版本”“-Dpackage=包类型”
一种方法是将其上传到您自己的Maven存储库管理器(如Nexus)。无论如何,拥有一个自己的存储库管理器是很好的做法。
我最近看到的另一个好方法是在构建生命周期中包含Maven安装插件:在POM中声明将文件安装到本地存储库。这是一个有点但很小的开销,并且不涉及手动步骤。
http://maven.apache.org/plugins/maven-install-plugin/install-file-mojo.html
指向${project.directory}/rebo/或file://uri的pom存储库可以与源驻留jarfiles一起工作,用于一个小项目的dep。这些信息不会泄漏到系统~/.m2 repo中,但如果未指定,则会影响maven版本选择与(通常是最近的)顶级版本的选择。
对于现有的dep,如果您可以使用“target”作为您最喜欢的结构或maven的默认值运行,则在分发时绑定的dep与shade类似,但更直接:
-cp“$PWD/target/classs:$PWD/target/lib/*”pkg.random.ClassWithMain
then
<build>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
在本地存储库中,您可以通过发出以下命令来安装jar
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> \
-DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>
点击这个有用的链接,从mkyoung的网站进行同样的操作。您也可以查看maven指南
在maven项目的根目录创建一个新文件夹,比如本地maven repo。
只需在pom.xml的<project>中添加一个本地repo:
<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]
推荐文章
- 在Java中从字符串中提取数字
- 套接字的连接超时和读超时之间的区别是什么?
- Java整数到字节数组
- 如何设置Windows环境下Java的环境变量
- Java Swing revalidate() vs repaint()
- Java中文件中的行数
- 指定的子节点已经有一个父节点。你必须先在子对象的父对象上调用removeView() (Android)
- 对于一个布尔字段,它的getter/setter的命名约定是什么?
- 如何获得当前屏幕方向?
- 如何在Android中渲染PDF文件
- 如何计算一个元素在列表中出现的次数
- c++中类似于java的instanceof
- 我如何解决错误“minCompileSdk(31)指定在一个依赖的AAR元数据”在本机Java或Kotlin?
- 如何POST表单数据与Spring RestTemplate?
- Mockito中检测到未完成的存根