生成maven工件路径

Edd*_*die 2 maven

Maven install 知道构建生成的所有工件,并将它们推送到本地。

将项目的主要工件以及生命周期中其他插件附加的任何其他工件安装到本地存储库。

帮助插件可能支持这个,但不确定正确的表达

# has all the pieces (artifact, version, type) but is it fair to assume filename will always be that combo?
mvn help:evaluate -Dexpression=project.artifact
Run Code Online (Sandbox Code Playgroud)

有什么方法可以从 Maven 命令获取路径列表吗?

我想生成一个特定工件的列表,以在构建过程中作为工件结果保留下来,而无需发布到 Maven 存储库。

t0m*_*ppa 5

Maven 存储库中的工件路径默认遵循以下公式:

  • groupId使用句号作为分隔符分成文件夹,然后artifactId形成version最后两个文件夹
  • 工件的文件名由artifactId和组成version,类型由以下定义packaging

因此,假设您有一个包含 main 的多模块项目pom.xml

<groupId>com.foobar.my.business</group>
<artifactId>myApp</artifactId>
<version>1.0-SNAPSHOT</version>
Run Code Online (Sandbox Code Playgroud)

它有两个子模块,第一个是创建 REST 端点的 Web 模块:

<parent>
  <groupId>com.foobar.my.business</group>
  <artifactId>myApp</artifactId>
  <version>1.0-SNAPSHOT</version>
</parent>

<artifactId>myApp-web</artifactId>
<packaging>war</packaging>
Run Code Online (Sandbox Code Playgroud)

第二个是持久层:

<parent>
  <groupId>com.foobar.my.business</group>
  <artifactId>myApp</artifactId>
  <version>1.0-SNAPSHOT</version>
</parent>

<artifactId>myApp-persistence</artifactId>
<packaging>jar</packaging>
Run Code Online (Sandbox Code Playgroud)

假设您的本地存储库是从 找到的~/.m2/repository。然后您的工件将保存在本地存储库中:

  • 〜/.m2/repository/com/foobar/my/business/myapp/1.0-SNAPSHOT/myapp-1.0-SNAPSHOT.pom
  • 〜/.m2/repository/com/foobar/my/business/myapp-web/1.0-SNAPSHOT/myapp-web-1.0-SNAPSHOT.pom
  • 〜/.m2/repository/com/foobar/my/business/myapp-web/1.0-SNAPSHOT/myapp-web-1.0-SNAPSHOT.war
  • 〜/.m2/repository/com/foobar/my/business/myapp-persistence/1.0-SNAPSHOT/myapp-persistence-1.0-SNAPSHOT.pom
  • 〜/.m2/repository/com/foobar/my/business/myapp-persistence/1.0-SNAPSHOT/myapp-persistence-1.0-SNAPSHOT.jar

工件的最终构建名称和本地存储库位置可以修改。但您可以使用以下表达式来检查这些:

  • ${settings.localRepository}将返回本地存储库的路径。
  • ${project.build.finalName}将返回最终构建工件名称。

要以几乎正确的格式获得此列表,您可以运行:

  • 在 Windows 上mvn -q exec:exec -Dexec.executable="cmd" -Dexec.args="/C echo ${settings.localRepository}\${project.groupId}\${project.artifactId}\${project.version}\${project.build.finalName}.${project.packaging}"
  • 关于 POSIXmvn -q exec:exec -Dexec.executable='echo' -Dexec.args='${settings.localRepository}/${project.groupId}/${project.artifactId}/${project.version}/${project.build.finalName}.${project.packaging}'

然后你只需修复 中的句号即可groupId

还有一个mvn dependency:build-classpath命令将显示文件系统上每个依赖项的位置,有时会派上用场。