我已经在Stack Overflow上找到了如何在项目中包含第三方JAR而不将其安装到“本地存储库”的答案:
Can I add jars to maven 2 build classpath without installing them?
但是,当我使用Maven Shade插件创建包含项目所有依赖项的JAR时,第三方JAR不会自动包含在内 .
如何让Maven Shade插件将这样的第三方JAR添加到着色的JAR中?
根据得到的答案,我做到了 . 我做的是,将这个片段添加到我的pom.xml的开头:
<repositories>
<repository>
<id>repo</id>
<url>file://${basedir}/repo</url>
</repository>
</repositories>
然后为我的项目添加了一个依赖项,也添加到pom.xml:
<dependencies>
<dependency>
<groupId>dummy</groupId>
<artifactId>dummy</artifactId>
<version>0.0.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
然后运行命令行将包添加到'repo':
mvn org.apache.maven.plugins:maven-install-plugin:2.3.1:install-file
-Dfile=<my-jar>.jar -DgroupId=dummy -DartifactId=dummy
-Dversion=0.0.0 -Dpackaging=jar -DlocalRepositoryPath=`pwd`/repo/
(不确定repo路径是否需要完整路径,但不想冒险 . )
repo子目录的内容现在是:
repo/dummy/dummy/0.0.0/dummy-0.0.0.jar
repo/dummy/dummy/0.0.0/dummy-0.0.0.pom
repo/dummy/dummy/maven-metadata-local.xml
现在我可以将其检入版本控制,并且没有本地或远程依赖项 .
3 回答
是的,因为假定始终存在
system
范围的依赖关系(这正是system
范围的内容)所以他们赢了system
了解system
范围依赖关系是什么,他们只是继续滥用它们(是的,这是滥用),并且然后得到副作用,并想知道为什么(正如Brian在他的answer中指出的那样) .我已经在SO上写了many,many,really many次,在99%的情况下,应该避免使用
system
范围的依赖关系 . 我将再次重复Dependency Scopes迷你指南所说的内容:因此,不是使用
system
范围,而是:通过
install:install-file
将库添加到本地存储库 . 这是一种快速而肮脏的方式来使事情正常工作,如果你是一个人,它可能是一个选项,但它使你的构建不可移植 .安装并运行像Nexus,Archiva或Artifactory这样的"enterprise repository"并通过
deploy:deploy-file
添加您的库 . 这是 ideal 场景 .如this previous answer中所述设置基于文件的存储库并将库放在那里 . 如果您不想牺牲便携性,这就是 best 妥协 .
请停止使用
system
范围 .Maven addjars插件解决了这个问题 - 请参阅
http://code.google.com/p/addjars-maven-plugin/wiki/UsagePage
使用<resources>将我的lib包含在所有jar中 . 即: