我有一个依赖于工件B的项目A.我在B上做了一些黑客攻击,并希望在A中看到它。所以我不希望A在我的本地存储库中使用该版本,相反,我想要A使用我的黑客版B。
我正在寻找一种可以将my-hacked-B.jar指定为A的依赖关系的解决方案,如下所示:
cd A && mvn package -Ddependency.org.groupB.B.jar.path=path/to/my-hacked-B.jar
是否可以,或者我必须在我的本地存储库中安装修改后的B?
答案 0 :(得分:2)
您不能在命令行上执行此操作,但可以在pom.xml中set the dependency scope to system
并提供依赖项的路径。
<dependency>
<groupId>org.groupB</groupId>
<artifactId>B</artifactId>
<version>2.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/path/to/hacked-B.jar</systemPath>
</dependency>
答案 1 :(得分:1)
无法从命令行解析依赖关系,但有一种方法可以让maven在外部解析依赖关系。
我创建了一个临时包装器pom.xml,它聚合了两个项目。它可以工作,无需在本地存储库中安装任何东西。
唯一的问题是我无法在<module/>
中使用绝对路径。
答案 2 :(得分:0)
您可以通过从'net下载的版本mvn clean install
将您的黑客入侵您当地的maven回购。您需要确保projecjt B的pom反映了您所依赖的版本以及不快照版本(或者,更一般地说,您{{1}的项目B的版本}必须匹配项目A中所需的版本;是否编辑A的pom或B的pom无关紧要。)
答案 3 :(得分:0)
有点晚了:)你可以用属性来做:
<properties>
<org.groupB.B.scope>compile</org.groupB.B.scope>
<org.groupB.B.path></org.groupB.B.path>
</properties>
<dependency>
<groupId>org.groupB</groupId>
<artifactId>B</artifactId>
<version>2.0</version>
<scope>${org.groupB.B.scope}</scope>
<systemPath>${org.groupB.B.path}</systemPath>
</dependency>
然后:
mvn package -Dorg.groupB.B.scope=system -Dorg.groupB.B.path=path/to/my-hacked-B.jar