3

我正在尝试向system我的 POM 添加范围依赖项。诀窍是我没有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并被告知 mysystemPath无效,因为它不是绝对路径。(该属性包含绝对路径)

或者,还有其他方法可以做到这一点吗?我需要能够查询主机系统以获取系统范围依赖项的位置。仅将路径硬编码到 POM 中是行不通的。

4

2 回答 2

5

这不可能。为了执行插件,maven 需要在本地存储库中“下载”所有需要的东西。它需要确定依赖项的版本,这些版本通常在属性中定义。因此,在执行插件之前,它需要先找到属性值,然后再下载所有缺失的内容。您希望在定义属性值之前执行插件...

我猜属性插件在执行时会添加额外的属性值,但这是在 maven 依赖项检查之后发生的......

于 2013-04-11T21:55:06.020 回答
1

我在这里猜测,但如果你必须动态指定它,那是因为你必须在另一个环境中运行它。您可以做的仍然是使用 maven 属性,但您可以将其作为参数传递到命令行:

mvn -Doutsidelib.location=myAbsolutePathReadFromPropertyFileJustBefore

当然,在运行 maven 命令之前,您必须阅读属性文件或设置环境变量。

于 2013-03-21T21:35:39.400 回答