如何在多个Maven插件Mojos中共享实例相同的实例?
问题描述:
我正在实现启动和停止内存数据库服务器的Maven插件。我有两个Mojos ServerStart
和ServerStop
。在ServerStop
中,我创建了一个数据库服务器实例并开始呼叫server.start()
。在ServerStop
Mojo我想获得一个服务器的实例来调用server.stop()
。我可以以某种方式创建Server实例,然后将它注入到我的Mojos中?如何在多个Maven插件Mojos中共享实例相同的实例?
下面是示例代码:
@MojoGoal("start")
public class StartServerMojo extends AbstractMojo {
//How to instantiate and inject the server here?
private Server server;
public void execute() throws MojoExecutionException {
server.start();
}
}
@MojoGoal("stop")
public class StopServerMojo extends AbstractMojo {
//How to instantiate and inject the server here?
private Server server;
public void execute() throws MojoExecutionException {
server.stop();
}
}
答
保持服务器实例中pluginContext可在AbtractMojo。请记住,您无法从故障安全测试中访问它。
另一种方法是以类似的方式将您的插件转换为Cargo maven插件的容器,这与我在OSGi框架(https://github.com/TuomasKiviaho/org.codehause.cargo.container.osgi) 。 Cargo项目旨在针对JavaEE容器进行测试,但这对我来说不是问题。
答
您可以定义服务器的链接此
/**
* @parameter
* */
private Server server;
,并配置它的POM,你所引用的插件
,如:
<configuration>
<server>
<serverField1>value1</serverField1>
<serverField2>value2</serverField2>
...
</server>
</configuration>
在这里看到:http://maven.apache.org/guides/plugin/guide-java-plugin-development.html
2个问题。 1)你想如何将它注入你的mojos?例如,你有配置的地方吗? 2)我之前没有看到过这样的注解('@MojoGoal(“stop”)')。你能告诉我你在哪里找到它吗? :) – 2012-02-29 11:46:16
安德鲁,我没有配置它。这是我的问题,如何实例化并注入。注释来自JFrog的Maven Anno Mojo扩展(http://wiki.jfrog.org/confluence/display/OSS/Maven+Anno+Mojo)。它允许使用Java注释代替XDoclet注释。 – 2012-02-29 11:55:14
好的,我明白了。你需要做什么来实例化服务器?我的意思是编程。 – 2012-02-29 12:56:22