如何在多个Maven插件Mojos中共享同一实例



我正在实现Maven插件,它在内存数据库服务器中启动和停止。我有两个Mojo ServerStartServerStop。在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容器进行测试,但这对我来说不是问题。

最新更新