【问题标题】:Is it possible to get Maven dependencies in a property at run-time?是否可以在运行时在属性中获取 Maven 依赖项?
【发布时间】:2012-08-06 19:03:25
【问题描述】:

我正在处理一种情况,我们在 POM 中使用 LATEST 和 RELEASE 关键字来处理某个依赖项(依赖项和项目都归我们所有,所以我们控制什么是 LATEST 和 RELEASE...我们一次只支持一个版本)。使用这些关键字可以让我们最大限度地减少发布后所需的维护。

在构建过程中有一个步骤必须从解压缩的依赖项中复制 DLL,但由于我们没有指定特定版本,因此我们将解压缩的依赖项的版本号硬编码,并且必须在每次发布后更新它.有没有办法在运行时从 Maven 属性获取此依赖项的版本?

maven-dependency-plugin (http://maven.apache.org/plugins/maven-dependency-plugin/index.html) 的属性目标获取工件在本地存储库中的位置(不是我在找什么)。 depends-maven-plugin(显示在这里:http://team.ops4j.org/wiki/display/paxexam/Pax+Exam+-+Tutorial+1)可以生成一个包含各种依赖项及其版本的文件,但使用它需要一个进程读取文件并利用该信息。我想知道是否有更多“Maven方式”,例如访问依赖版本的属性。

编辑:为了澄清,我们需要版本号,这样我们就可以进入解压后的依赖目录来复制文件。

【问题讨论】:

  • 这可能会有所帮助...根据this,您可以使用以下方法引用本地存储库中 jar 的路径:${maven.dependency.com.foo.Bar.jar.path}
  • 如果你创建一个由从外部注入的属性定义的依赖项,你的构建将无法重现,这将无法工作。
  • @khmarbaise 使用 SNAPSHOT 并没有帮助,因为版本号本身会随着版本的不同而变化。所描述问题的范围超出了特定版本的开发范围。我也意识到使用 LATEST 和 RELEASE 会使以前的构建无法重现,但我们只支持我们项目的最新发布版本。它是一个用于网站的内部库,因此我们不会使用多个版本。使用 LATEST 和 RELEASE 关键字可以减少手动维护(我们经常发布)。不过,感谢您的建议。
  • @BenjaminLinus 感谢您的建议,但我们需要访问解压后的工件……Maven 为我们做的。我们只是没有 Maven 中可用的解压工件的完整路径,因为我们使用 LATEST 和 RELEASE 作为版本。

标签: maven maven-2


【解决方案1】:

我不确定你所说的“maven way”是什么意思,但在查看了你已经提到的相同插件后,我做了这样的事情:

  <build>
<plugins>
  <plugin>
    <groupId>org.codehaus.gmaven</groupId>
    <artifactId>gmaven-plugin</artifactId>
    <version>1.5</version>
    <executions>
      <execution>
        <phase>initialize</phase>
        <goals>
          <goal>execute</goal>
        </goals>
        <configuration>
          <source>                                                                                                                                                                                                                                                   
            project.properties.put('firstdependencyinthepom', project.dependencies[0]['version'])                                                                                                                                                                              
            project.properties.put('seconddependencyinthepom', project.dependencies[1]['version'])                                                                                                                                                                            
          </source>
        </configuration>
      </execution>
    </executions>
  </plugin>

然后我可以分别使用 ${firstdependencyinthepom} 和 ${seconddependencyinthepom} 来引用这些依赖项的版本。

【讨论】:

  • 抱歉,回复这个问题需要一点时间。这是一个有趣的想法,但我在你提到的 ${firstdependencyinthepom} 中得到“RELEASE”或“LATEST”。它实际上并没有解决真实版本。仅供参考...通过“Maven 方式”,我本质上是指在 Maven 中工作,而不是做一些感觉很奇怪的事情。例如,当我提到使用 Maven 生成包含信息的文件,然后将其内容读回 Maven 以供使用时。
猜你喜欢
  • 2023-03-16
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多