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

时间:2012-12-12 12:47:48

标签: maven-plugin

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

A
-B
-C

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

我已经找到了获取当前项目文件夹的方法(不是从mvn install启动的地方),但到目前为止还没有找到任何内容,而不涉及将所有内容推回到用户(命令行黑客, pom hacks,属性文件等)。我还希望在启动遗产之前改变工作目录,但Java不允许这样做。那我该怎么办?

3 个答案:

答案 0 :(得分:5)

为了再次回答我自己的问题(在我身上发生了很多),解决方案从这里开始:

/**
 * 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可用的情况下,我实际上已经在厕所训练遗留代码,以便在正确的位置开展业务。

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

如果您只想获得构建工件的目录,那么执行此操作可能有点简洁:

/**
 * @parameter expression="${project.build.directory}/${project.build.finalName}"
 * @readonly
 */
private File outputPath;