【问题标题】:read property from external file - Maven从外部文件读取属性 - Maven
【发布时间】:2013-02-05 22:58:57
【问题描述】:

我必须读取由多个 maven 项目共享的属性,为此我尝试使用 properties-maven-plugin 之类的:

<plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>properties-maven-plugin</artifactId>
            <version>1.0-alpha-1</version>
                <configuration>
                <files>
                    <file>conf.properties</file>
                </files>
            </configuration>
            <executions>
                <execution>
                    <phase>initialize</phase>
                    <goals>
                        <goal>read-project-properties</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        </plugins>
        </build>

<distributionManagement>
    <snapshotRepository>
        <id>snapshots</id>
        <url>${nexusurl}</url>
    </snapshotRepository>
</distributionManagement>
</project>    

文件 conf.properties 包含:

 nexusurl=http://localhost:8081/nexus/content/repositories/snapshots

问题是在使用 mvn deploy 时,属性 nexusurl 没有解析,导致的错误跟踪是:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy
(default- deploy) on project parent: Failed to deploy artifacts/metadata: No connector 
available to access repository snapshots (${nexusurl}) of type default using the 
available  factories WagonRepositoryConnectorFactory -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute
goal   org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on 
project  parent: Failed to deploy artifacts/metadata: No connector available to 
access repository snapshots (${nexusurl}) of type default using the available
factories WagonRepositoryConnectorFactory

我曾尝试更改插件的执行阶段(验证、安装、部署),将插件的版本更改为 1.0-alpha-2,但问题仍然存在。

我会感谢任何帮助。 谢谢,

【问题讨论】:

  • 您的 conf.properties 似乎被忽略了。你怎么指?如果你运行 mvn deploy -Dnexusurl=http://localhost:8081/nexus/content/repositories/snapshots 会发生什么?
  • 不,属性文件没有被忽略,问题是 carlspring 的回答所描述的, 部分中的值是在最初加载 POM 时分配的。 properties-maven-plugin 仅影响加载属性点之后的插件执行。

标签: maven maven-2


【解决方案1】:

问题是 pom.xml 被读取并与属性集成比你的插件加载要早得多。您可以将插件用于构建中的值 - 例如在插件之间,但您尝试做的事情不会像那样工作。

【讨论】:

  • 您能提出通过其他方式或插件传递属性的建议吗?
  • 插件不适用于您的情况。 Maven 将属性插入到加载的 POM 模型中的方式很重要。为了使它起作用,您必须通过命令行传递变量(我几乎看不出这样做有什么好处)。为了可移植性,您需要保留&lt;distributionManagement/&gt; URL 硬编码。
  • 将某些事物作为属性是有道理的,但这一点并不完全在其中。
  • &lt;distributionManagement/&gt; 放入父 POM 文件中。然后扩展它。这将使您拥有一个用于此设置的中心位置。维护起来更容易,并且非常接近您想要做的事情。
  • 感谢您的回复,作为解决方案,我们可以将所有项目的分发管理放在一个父 POM 中,这样可以方便维护硬编码属性列表,或者将列表放在maven的settings.xml下properties部分的属性
猜你喜欢
  • 1970-01-01
  • 2010-10-25
  • 1970-01-01
  • 2017-01-24
  • 1970-01-01
  • 2020-05-10
  • 2011-10-31
  • 2016-11-29
相关资源
最近更新 更多