如何在多个Maven插件Mojos中共享实例相同的实例?

时间:2012-02-29 11:37:55

标签: maven maven-plugin

我正在实现启动和停止内存数据库服务器的Maven插件。我有两个Mojos 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();
    }

}

2 个答案:

答案 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容器,但对我来说这不是问题。