我正在实现Maven插件,它在内存数据库服务器中启动和停止。我有两个Mojo 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();
}
}
您可以定义此的服务器链接
/**
* @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
在AbtractMojo中保持pluginContext中的服务器实例可用。请记住,您无法通过故障保护测试访问它。
另一种方法是以类似于我对OSGi框架所做的方式,将您的插件转换为Cargo maven插件的容器形式(https://github.com/TuomasKiviaho/org.codehause.cargo.container.osgi)。Cargo项目旨在针对JavaEE容器进行测试,但这对我来说不是问题。