【问题标题】:Maven settings.xml property is not resolved in transitive dependencyMaven settings.xml 属性未在传递依赖中解析
【发布时间】:2011-05-18 09:50:31
【问题描述】:

我在 settings.xml 中有一个属性,

fwk.version = "2.0.001"

另一边,一个多项目,有两个项目,earmodule 和 ejbmodule。

ejbmodule 有一个依赖:

    <dependency>
        <groupId>shared-lib</groupId>
        <artifactId>proxi2.fwk.comuns</artifactId>
        <version>${fwk.version}</version>
        <type>pom</type>
    </dependency>

它可以正常工作

但是earmodule对ejbmodule有依赖

<dependencies>
    <dependency>
        <groupId>projectGroup</groupId>
        <artifactId>ejbmodule</artifactId>
        <version>1.0</version>
        <type>ejb</type>
    </dependency>
</dependencies>

它试图解决依赖但失败了:

[警告] 缺少共享库的 POM:proxi2.fwk.comuns:pom:${fwk.version}

而是尝试下载

shared-lib:proxi2.fwk.comuns:pom:2.0.001

当我尝试打包父项目时会发生这种情况。

看起来像 Maven3 中的一个错误

你知道为什么吗?

谢谢

编辑:

我们的解决方案/解决方法一直在父 pom 中定义一个 dependencyManagement 部分,因为在这个级别上工作正常。

然后在子项目ejbmodule中,我们有一个“独立版本”依赖,因为在dependencyManagement中使用了父定义

settings.xml:

<fwk.version>2.0.001</fwk.version>

父pom:

<dependencyManagement>
    <dependency>
        <groupId>shared-lib</groupId>
        <artifactId>proxi2.fwk.comuns</artifactId>
        <version>${fwk.version}</version>
        <type>pom</type>
    </dependency>
</dependencyManagement>

ejbmodule pom:

<dependency>
    <groupId>shared-lib</groupId>
    <artifactId>proxi2.fwk.comuns</artifactId>
    <type>pom</type>
</dependency>

我希望这对其他人有帮助

【问题讨论】:

  • 如果在你的父 pom 中指定相同的属性而不是 settings.xml 是否有效?另外,您是在尝试 mvn package 还是 mvn install?后者有效吗?
  • 这是一个包,如果我在父 pom 中指定它也不起作用。

标签: maven dependencies settings


【解决方案1】:

看起来有一个与此相关的 open maven 错误。

【讨论】:

【解决方案2】:

我只在不同的情况下看到类似的问题。我使用一个属性来定义一个 URL,将我创建的 javadocs 发送到这样的位置

<distributionManagement>
    <site>
        <id>javadocs</id>
        <name>Java Documentation</name>
        <url>scp://${javadocs.url}/${project.groupId}/${project.artifactId}/${project.version}</url>
    </site>
</distributionManagement>

当然,我在配置文件中的 settings.xml 中设置了属性

</settings>
    .
    .
    <profiles>
        <profile>
            <id>develop</id>
            <properties>
                <environment.type>develop</environment.type>
                <javadocs.url>javadocs.server.com/home/javadocs/javadocs</javadocs.url>
            </properties>
            .
            .
    <activeProfiles>
        <activeProfile>develop</activeProfile>
    </activeProfiles>
</settings>

distributionManagement 部分被放入项目 parent 的 pom 中,该部分在项目 child

中用作父级

什么时候做

mvn site-deploy

child 项目中我收到了这个错误:

[ERROR] 未能执行目标 org.apache.maven.plugins:maven-site-plugin:3.0:deploy (default-deploy) 在项目子项上:上传站点时出错:无法连接。原因: java.net.UnknownHostException: ${javadocs.url} -> [帮助 1]

很明显,该属性已不再设置。

我能想到的唯一解决方法是将属性放在父 pom.xml 中。我知道这很糟糕,因为如果你想改变它们,你需要重新部署。

【讨论】:

    【解决方案3】:

    鉴于此问题似乎是由于 Maven 的错误并且显然预计不会很快修复,我找到了一个似乎对我有用的简单解决方法。

    不要像 fwk.version 那样用点符号定义变量,而是尝试像 fwk_version 这样的蛇形大小写。我尝试在我的 settings.xml 存储库 url 中定义它,它可以工作。

    参考:我从这篇帖子http://maven.40175.n5.nabble.com/Settings-properties-not-resolved-when-used-in-repository-element-td5746974.html找到这个

    我希望它对传递依赖也有帮助。

    【讨论】:

    • 欢迎提供解决方案链接,但请确保您的答案在没有它的情况下有用:add context around the link 这样您的其他用户就会知道它是什么以及为什么会出现,然后引用最相关的您链接到的页面的一部分,以防目标页面不可用。 Answers that are little more than a link may be deleted.
    • 这并没有提供问题的答案。请改写评论。
    • @Zoe 你是对的,当我只想评论以前的答案时,我创建了一个新答案。我的错。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-06
    • 2020-03-01
    • 2016-11-11
    • 2023-03-20
    相关资源
    最近更新 更多