【问题标题】:Pom file not reading environment variablesPom文件不读取环境变量
【发布时间】:2020-11-04 21:57:01
【问题描述】:

更新:

如果我将 ${env.JAVA_HOME} 更改为系统属性 ${java.home} 然后它会执行 maven-dependency-plugin unpackcopy 任务。但现在它在 maven-antrun-plugin:1.8:run (build-content) 上失败了。

[ERROR] one of its dependencies could not be resolved: Could not find artifact ... at specified path ... -> [Help 1]

为什么要在 JRE 文件夹中查找我的 jar 文件?

/{path to jdk}/Contents/Home/jre/lib/...

它就坐在这里:

/{path to jdk}/Contents/Home/lib

我的 pom.xml 文件没有读取我的 JAVA_HOME 环境变量。我在 Mac 上。这是条目:

<dependencies>
    <dependency>
        <groupId>{groupId}</groupId>
        <artifactId>{artifactId}</artifactId>
        <version>${version}</version>
        <scope>system</scope>
        <systemPath>${env.JAVA_HOME}/lib/myPersonalJar.jar</systemPath>
    </dependency>
</dependencies>

这是错误:

[ERROR] [ERROR] Some problems were encountered while processing the POMs:
[ERROR] 'build.plugins.plugin[org.apache.maven.plugins:maven-antrun-plugin].dependencies.dependency.systemPath' for ... must specify an absolute path but is ${env.JAVA_HOME}/lib/myPersonalJar.jar

在 iTerm 应用程序中,我可以回显 $JAVA_HOME,它指向正确的位置。

当我将 systemPath 硬编码到我的 Java 主页时,它工作得很好。我不知道为什么。为了提供一些上下文,我的 ant 构建文件也没有读取我的环境变量。

我错过了一些愚蠢的简单东西吗?

【问题讨论】:

  • 当然,JAVA_HOME是在你的环境中显式设置的?您使用的是哪个 Java 版本/发行版?许多将 JRE 作为 JDK 的子目录。因此,看起来您的 JAVA_HOME 被设置为 /{path to jdk}/Contents/Home/jre 而不是 /{path to jdk}/Contents/Home。
  • jre 是 jdk 的子目录。并且 JAVA_HOME 正确显示为:/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home。但它最初并没有像以前那样失败。它克服了初始错误,开始添加依赖项,然后失败。似乎是依赖导致了这个问题。
  • 是的,您更新的编辑显示 Maven 在 1.7 中寻找 tools.jar,但您的 JAVA_HOME 是 1.8(在 jre 子目录下)。我将发布我用来为构建和 antrun 添加依赖项的配置文件。
  • 有趣。如果我查看项目特定设置 --> java 编译器,则合规级别为 1.7。这是什么原因造成的?
  • 肯定有问题,而且 antrun 很挑剔。

标签: java maven ant


【解决方案1】:

尝试将此个人资料添加到您的pom.xml(在&lt;profiles/&gt;):

<profile>
  <id>tools.jar</id>
  <activation>
    <file><exists>${java.home}/../lib/tools.jar</exists></file>
  </activation>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>jdk</groupId>
        <artifactId>tools</artifactId>
        <version>${java.specification.version}</version>
        <scope>system</scope>
        <systemPath>${java.home}/../lib/tools.jar</systemPath>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-antrun-plugin</artifactId>
          <dependencies>
            <dependency>
              <groupId>jdk</groupId>
              <artifactId>tools</artifactId>
              <version>${java.specification.version}</version>
              <scope>system</scope>
              <systemPath>${java.home}/../lib/tools.jar</systemPath>
            </dependency>
          </dependencies>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-javadoc-plugin</artifactId>
          <configuration>
            <docletPath>${tools.jar}</docletPath>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</profile>

我已经包含了对 javadoc 插件的相应更改,可能会或 可能对你没用。如果不需要,可以将其删除。

【讨论】:

  • 是的,它仍然无法正常工作。它在解包任务之前发出警告。它仍在查看 JRE 文件夹,我不知道为什么: 'build.plugins.plugin[org.apache.maven.plugins:maven-antrun-plugin].dependencies.dependency.systemPath' for com.sun:tools: jar 指的是不存在的文件 /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/jre/lib/tools.jar
  • 添加配置文件后是否删除了 com.sun:tools 依赖项?
  • 你是对的,这确实有效。但为什么?现在它在尝试加载 Apache Ivy 时卡住了:[echo] ivy.home is ${env.USERPROFILE}/ivy。另一个环境变量问题。一定会有更大的事情发生。
  • mvn 环境变量未传播到 ant 调用。您需要一种策略来通过属性传播这些值。如果您的 ant 任务在 build.xml 中表示,那么您可以查看使用 Maven Artifact Resolver Ant Tasks 访问 POM 的属性。
  • 好的,非常感谢您的帮助。我去看看。
猜你喜欢
  • 2017-03-06
  • 2019-08-27
  • 2016-12-29
  • 1970-01-01
  • 2017-08-13
  • 2019-02-25
  • 2021-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多