2012-02-29 83 views
0

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

} 
+0

2个问题。 1)你想如何将它注入你的mojos?例如,你有配置的地方吗? 2)我之前没有看到过这样的注解('@MojoGoal(“stop”)')。你能告诉我你在哪里找到它吗? :) – 2012-02-29 11:46:16

+0

安德鲁,我没有配置它。这是我的问题,如何实例化并注入。注释来自JFrog的Maven Anno Mojo扩展(http://wiki.jfrog.org/confluence/display/OSS/Maven+Anno+Mojo)。它允许使用Java注释代替XDoclet注释。 – 2012-02-29 11:55:14

+0

好的,我明白了。你需要做什么来实例化服务器?我的意思是编程。 – 2012-02-29 12:56:22

回答

0

保持服务器实例中pluginContext可在AbtractMojo。请记住,您无法从故障安全测试中访问它。

另一种方法是以类似的方式将您的插件转换为Cargo maven插件的容器,这与我在OSGi框架(https://github.com/TuomasKiviaho/org.codehause.cargo.container.osgi) 。 Cargo项目旨在针对JavaEE容器进行测试,但这对我来说不是问题。