我正在实现启动和停止内存数据库服务器的Maven插件。我有两个Mojos ServerStart
和ServerStop
。在ServerStop
我创建了一个数据库服务器实例并开始调用server.start()
。在ServerStop
Mojo中,我想获得一个服务器的同一实例来调用server.stop()
。我可以以某种方式创建服务器的实例,然后将其注入我的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();
}
}
答案 0 :(得分:1)
您可以定义服务器链接
/**
* @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
答案 1 :(得分:0)
将服务器实例保留在AbtractMojo的pluginContext中。请记住,您无法从故障安全测试中访问它。
另一种方法是以与我使用OSGi框架(https://github.com/TuomasKiviaho/org.codehause.cargo.container.osgi)类似的方式,以Cargo maven插件的容器形式转换插件。 Cargo项目旨在测试JavaEE容器,但对我来说这不是问题。