6

我正在尝试将一些遗留代码包含在一个 Maven 插件中。遗留代码正在 OS 当前工作目录中写入其输出。我想将所有这些移到目标目录中。即如果我的项目嵌套是

A
-B
-C

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

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

4

3 回答 3

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 可用,我实际上结束了对遗留代码的厕所培训,以便在正确的地方开展业务。

于 2012-12-24T20:52:34.853 回答
8

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

@Parameter(readonly = true, defaultValue = "${project}")
private MavenProject project;
于 2016-05-30T13:10:39.080 回答
0

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

/**
 * @parameter expression="${project.build.directory}/${project.build.finalName}"
 * @readonly
 */
private File outputPath;
于 2013-09-24T05:16:56.633 回答