Eclipse maven tycho加载p2回购位置的属性文件

Eclipse maven tycho加载p2回购位置的属性文件,eclipse,maven,tycho,Eclipse,Maven,Tycho,我希望有一个外部属性文件,其中包含生成中使用的本地p2镜像的位置,例如: mirror.location=/my/mirror/location 我希望这是一个外部文件,因为我希望在maven和其他脚本中使用它,并且我希望避免用不同的语言复制位置 我发现我应该使用properties maven插件来做到这一点,如下所示 <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId&

我希望有一个外部属性文件,其中包含生成中使用的本地p2镜像的位置,例如:

mirror.location=/my/mirror/location
我希望这是一个外部文件,因为我希望在maven和其他脚本中使用它,并且我希望避免用不同的语言复制位置

我发现我应该使用properties maven插件来做到这一点,如下所示

<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>

org.codehaus.mojo
属性maven插件
${tycho.version}
验证
读取项目属性
地点、物业
然后,我想在同一pom文件中使用存储库url中的read属性

<repositories>
    <repository>
        <id>eclipse_mirror</id>
        <url>${mirror.location}/eclipse/</url>
        <layout>p2</layout>
    </repository>
</repositories>

月蚀镜
${mirror.location}/eclipse/
p2
问题是Maven/Tycho在生命周期的任何阶段之前就加载了存储库,并打印出这个错误

[INFO]MavenProject的计算目标平台:。。。
[错误]内部错误:java.lang.RuntimeException:无效的存储库URL:${mirror.location}/eclipse/:无协议:${mirror.location}/eclipse/->[帮助1]
org.apache.maven.InternalErrorException:内部错误:java.lang.RuntimeException:无效的存储库URL:${mirror.location}/eclipse/

关于如何使用属性文件指定存储库URL的任何线索

问题是Maven/Tycho在生命周期的任何阶段之前就加载了存储库,并打印出这个错误

这一观察是正确的。只要不是固定的,就不能使用
properties maven plugin
来操作Tycho在依赖项解析期间需要其值的属性

话虽如此,您是否意识到可以在Maven的
setting.xml
中使用?这是一个更好的声明镜像等设置的地方,因为这样可以确保主构建(如
pom.xml
中指定的)是自包含的,即不需要系统属性等外部知识


最后,请注意,您可以在应用程序中引用环境变量,如
${env.HOME}
。如果您将变量放入一个文件中,并让shell在调用
mvn
之前对其进行源代码生成,那么您也可以在其他地方重复使用该文件(尽管它不是100%
.properties
文件格式)。

非常感谢您的注释。我使用settings.xml文件来镜像存储库,我基本上可以做我想做的事情,不像我希望的那样干净,但现在已经足够好了。谢谢。