java调用maven插件,在父pom中定义Maven插件,但只调用子项目中的插件

我最终编写了自己的插件,利用mojo-executor调用其他mojos . 这允许我1)集中构建配置和2)最小化在每个子项目中重复的配置量 .

(如果您对所有这些的原因感到好奇:每个子项目都是一个将从命令行执行的作业 . 该构建设置一个调用者shell脚本并将其附加到构建中,以便将其检入我们的工件中存储库 . 稍后,部署脚本会将这些脚本下载到它们将运行的计算机上 . )

模板项目的相关部分是pom:

...

job-template

pom

job project template

...

job-maven-plugin

generate-sources-step

job-generate-sources

package-step

job-package

... (a couple more executions) ...

不得不创建一个新的maven-plugin项目(job-maven-plugin) . Pom看起来像:

...

job-maven-plugin

maven-plugin

job maven executor plugin

org.twdata.maven

mojo-executor

1.5

从模板项目中可以看出,我的插件中有多个mojos(每个阶段需要一些东西发生) . 例如,作业包mojo绑定到包阶段,并使用mojo-executor库运行另外两个mojos(只附加一些构建工件):

/**

* @goal job-package

* @phase package

*/

public class PackageMojo extends AbstractMojo {

/**

* @parameter expression="${project}"

* @required

* @readonly

*/

protected MavenProject project;

/**

* @parameter expression="${session}"

* @required

* @readonly

*/

protected MavenSession session;

/**

* @component

* @required

*/

protected PluginManager pluginManager;

@Override

public void execute() throws MojoExecutionException, MojoFailureException {

ExecutionEnvironment environment = executionEnvironment(project, session, pluginManager);

// Attach script as a build artifact

executeMojo(

plugin(

groupId("org.codehaus.mojo"),

artifactId("build-helper-maven-plugin"),

version("1.7")

),

goal("attach-artifact"),

configuration(

element("artifacts",

element("artifact",

element("file", "${project.build.directory}/script.shl"),

element("type", "shl")

)

)

),

environment

);

// Zip up the jar and script as another build artifact

executeMojo(

plugin(

groupId("org.apache.maven.plugins"),

artifactId("maven-assembly-plugin"),

version("2.3")

),

goal("single"),

configuration(

element("descriptors",

element("descriptor", "${project.build.directory}/job/descriptor.xml")

)

),

environment

);

}

}

然后,在子项目中,我只需要引用一次插件 . 在我看来,这比重复每个子项目中的每个幕后插件(不可接受地增加poms之间的耦合)更为可取 . 如果我想在将来向构建过程添加mojo执行,我只需修改一个地方并修改版本号 . 儿童项目的pom看起来像:

...

job-template

...

../job-template

job-testjob

test job

...

job-maven-plugin

此外,整个multimodule目录结构现在看起来像这样:

+- job

+- job-core

+- job-maven-plugin

+- job-template

+- job-testjob1 (inherits from job-template)

+- job-testjob2 (inherits from job-template)

在我看来,这个解决方案并不是完全最优的,因为我现在将插件配置嵌入到一系列mojos而不是pom中,但它符合我的目标,即集中配置并最大限度地减少子项目poms之间的重复 .

(最后一点说明:我刚刚发现maven-aggregate-plugin似乎允许在pom中对多个插件执行进行分组 . 这可能以稍微更理想的方式解决了问题,但我没心情重做最后一个几个小时的工作 . 虽然可能对别人有益 . )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值