如何在maven mojo中获取项目目录?

问题描述 投票:0回答:3

我正在尝试将一些遗留代码封装在 Maven 插件中。遗留代码正在将其输出写入操作系统当前工作目录。我想将所有这些移动到目标目录中。 IE。如果我的项目嵌套是

A
-B
-C

我在 B 或 C 中运行 mvn install,我在 B 或 C 中获得输出,并希望将它们移动到 B/target 和 C/target。更糟糕的是,如果我在 A 中启动 mvn install,B 和 C 的输出都会在 A 中结束,这显然非常糟糕(覆盖)。

我一直在寻找一种方法来获取当前项目文件夹(不是启动 mvn install 的地方),但到目前为止还没有发现任何不涉及将这一切推回给用户的方法(命令行 hacks、pom hacks) 、属性文件等)。我还希望有一种方法可以在启动遗留版本之前更改工作目录,但 Java 不允许这样做。那我该怎么办呢?

maven-plugin
3个回答
10
投票

快速说明:对于最新的 Maven 插件,可以使用注释:

@Parameter(readonly = true, defaultValue = "${project}")
private MavenProject project;

在基于此处文档的较新版本的 Maven 中:https://maven.apache.org/plugin-tools/maven-plugin-tools-annotations/index.html。它可以像这样用 @Component 进行注释:

@Component // since Maven 3.2.5, thanks to MNG-5695
private MavenProject project;

8
投票

再次回答我自己的问题(我经常遇到),解决方案从这里开始:

/**
 * The maven project.
 * 
 * @parameter expression="${project}"
 * @readonly
 */
private MavenProject project;

然后在设置方法中:

this.model = project.getModel();
this.build = model.getBuild();
this.finalName = build.getFinalName();
this.targetDir = new File(build.getDirectory());

使得 targetDir 指向正确的位置。然后遗留代码运行,将点放在任何它喜欢的地方,插件通过将它们移动到目标目录来清理。

对于初学者来说这已经足够好了。但有了 targetDir 可用,我实际上结束了对遗留代码进行厕所训练,以便在正确的位置完成其业务。


0
投票

如果您只想获取构建工件的目录,那么这样做可能会更简洁:

/**
 * @parameter expression="${project.build.directory}/${project.build.finalName}"
 * @readonly
 */
private File outputPath;
© www.soinside.com 2019 - 2024. All rights reserved.