maven tycho 加载 p2 repo 位置的属性文件
maven tycho load properties file for p2 repo locations
我想要一个外部属性文件,其中包含构建中使用的本地 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 中使用存储库 属性 中的读取
<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/
关于如何使用属性文件指定存储库 urls 的任何线索?
The problem is that Maven/Tycho loads the repositories well before any phase in the lifecycle and prints out this error
这个观察是正确的。只要 Bug 353889 不固定,就不能使用 properties-maven-plugin
来操作 Tycho 在依赖项解析期间需要其值的属性。
话虽这么说,你知道你可以在 Maven 的 setting.xml
中 declare mirrors 吗?恕我直言,这是一个更好的地方来声明像镜像这样的设置,因为你可以确保你的主构建构建(如 pom.xml
中指定的)是独立的,即不需要像系统属性这样的外部知识。
最后,请注意,您可以在 settings.xml
中引用 ${env.HOME}
等环境变量。如果您将变量放在一个文件中并让 shell 在 mvn
调用之前获取它,您也可以在其他地方重新使用该文件(尽管它不是 100% .properties
文件格式)。
我想要一个外部属性文件,其中包含构建中使用的本地 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 中使用存储库 属性 中的读取
<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/
关于如何使用属性文件指定存储库 urls 的任何线索?
The problem is that Maven/Tycho loads the repositories well before any phase in the lifecycle and prints out this error
这个观察是正确的。只要 Bug 353889 不固定,就不能使用 properties-maven-plugin
来操作 Tycho 在依赖项解析期间需要其值的属性。
话虽这么说,你知道你可以在 Maven 的 setting.xml
中 declare mirrors 吗?恕我直言,这是一个更好的地方来声明像镜像这样的设置,因为你可以确保你的主构建构建(如 pom.xml
中指定的)是独立的,即不需要像系统属性这样的外部知识。
最后,请注意,您可以在 settings.xml
中引用 ${env.HOME}
等环境变量。如果您将变量放在一个文件中并让 shell 在 mvn
调用之前获取它,您也可以在其他地方重新使用该文件(尽管它不是 100% .properties
文件格式)。