我希望有一个外部属性文件,其中包含构建中使用的本地p2镜像的位置,如:
mirror.location=/my/mirror/location
我希望这是一个外部文件,因为我想在maven和其他脚本中使用它,我希望避免使用不同语言复制该位置。
我发现我应该使用properties-maven-plugin来执行以下操作
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>${tycho.version}</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>locations.properties</file>
</files>
</configuration>
</execution>
</executions>
</plugin>
然后我想在同一个pom文件中使用存储库url中的read属性
<repositories>
<repository>
<id>eclipse_mirror</id>
<url>${mirror.location}/eclipse/</url>
<layout>p2</layout>
</repository>
</repositories>
问题是Maven / Tycho在生命周期的任何阶段之前很好地加载了存储库并打印出这个错误
[INFO] Computing target platform for MavenProject: ...
[ERROR] Internal error: java.lang.RuntimeException: Invalid repository URL: ${mirror.location}/eclipse/: no protocol: ${mirror.location}/eclipse/ -> [Help 1]
org.apache.maven.InternalErrorException: Internal error: java.lang.RuntimeException: Invalid repository URL: ${mirror.location}/eclipse/
有关如何使用属性文件指定存储库URL的任何线索?
答案 0 :(得分:1)
问题是Maven / Tycho在生命周期的任何阶段之前很好地加载了存储库并打印出这个错误
这种观察是正确的。只要Bug 353889未得到修复,就无法使用properties-maven-plugin
来处理在依赖解析期间Tycho所需值的属性。
话虽如此,你知道你可以{Maver's setting.xml
declare mirrors吗?这是恕我直言,更好地宣布设置喜欢镜像,因为您可以确保您的主构建版本(在pom.xml
中指定)是自包含的,即,不需要像系统属性的外部知识。
最后,请注意您可以在settings.xml
中引用${env.HOME}
等环境变量。如果您将变量放在一个文件中并让shell在mvn
调用之前获取它,您也可以在其他地方重用该文件(尽管它不是100%.properties
文件格式)。