我正在尝试向我的POM添加system
范围的依赖项。诀窍是我没有systemPath
。相反,我有一个属性文件的路径,该文件包含我可以用作路径的属性。
我已经尝试使用properties-maven-plugin来解决这个问题,但似乎系统依赖关系在插件运行之前得到了解决,所以我试图定义的属性很快就无法使用
这是我的POM部分:
<profiles>
<profile>
<id>dylink</id>
<dependencies>
<dependency>
<artifactId>outside-lib</artifactId>
<groupId>com.foo</groupId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${outsidelib.location}/outside-lib.jar</systemPath>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0-alpha-2</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>C:\path\to\file.properties</file>
</files>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
我运行类似mvn -P dylink compile
的内容,并告诉我systemPath
无效,因为它不是绝对路径。 (该属性包含绝对路径)
或者,有没有其他方法可以做到这一点?我需要能够向主机系统查询系统范围依赖关系的位置。将路径硬编码到POM中是行不通的。
答案 0 :(得分:5)
这是不可能的。为了执行插件,maven需要在本地存储库中“下载”所有内容。它需要确保依赖项的版本,这些版本通常在属性中定义。因此,它需要在执行插件之前,在下载所有缺失的内容之前找到属性值。您希望在定义属性值之前执行插件...
我想属性插件在执行时会添加额外的属性值,但这会在maven依赖关系检查后发生......
答案 1 :(得分:1)
我在这里猜测,但如果你必须动态指定它,那是因为你必须在另一个环境中运行它。您可以做的仍然是使用maven属性,但您可以将其作为参数传递给命令行:
mvn -Doutsidelib.location=myAbsolutePathReadFromPropertyFileJustBefore
当然,在运行maven命令之前,您必须先读取属性文件或设置env变量。