如何从命令行参数显式解决maven依赖?

时间:2011-12-07 17:05:18

标签: maven command-line dependencies properties command-line-interface

我有一个依赖于工件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?

4 个答案:

答案 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/>中使用绝对路径。

请参阅http://maven.apache.org/pom.html#Aggregation

答案 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