p2 repo位置的maven tycho加载属性文件

时间:2017-05-03 22:04:17

标签: eclipse maven tycho

我希望有一个外部属性文件,其中包含构建中使用的本地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的任何线索?

1 个答案:

答案 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文件格式)。