2012-02-29 17 views
0

私はメモリ内のデータベースサーバを起動および停止するMavenプラグインを実装しています。私は2つのモホスServerStartServerStopを持っています。 ServerStopでは、データベースサーバーのインスタンスを作成し、server.start()を呼び出して起動します。 ServerStop Mojoで私はserver.stop()を呼び出すために同じサーバーインスタンスを取得したいと思います。何とかServerのインスタンスを作成し、それを私のモホスに注入することはできますか?ここで複数のMavenプラグインモジョアでインスタンスを同じインスタンスで共有する方法は?

サンプルコードです:

@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 ")')。あなたはどこでそれを見つけましたか? :) –

+0

アンドリュー、私はそれを設定していない。それは私の質問です、それをインスタンス化して注入する方法です。アノテーションは、JFrogのMaven Anno Mojo拡張(http://wiki.jfrog.org/confluence/display/OSS/Maven+Anno+Mojo)からのものです。 XDocletアノテーションの代わりにJavaアノテーションを使用することができます。 –

+0

さて、わかりました。サーバーをインスタンス化するためには何をする必要がありますか?私はプログラム的に意味する。 –

答えて

0

はAbtractMojoで利用可能pluginContextにサーバインスタンスを保管してください。フェイルセーフテストからはアクセスできないことを覚えておいてください。

もう1つのアプローチは、OSGiフレームワーク(https://github.com/TuomasKiviaho/org.codehause.cargo.container.osgi)で行ったのと同様の方法で、Cargo Mavenプラグイン用のコンテナの形式でプラグインを有効にすることです。 。 CargoプロジェクトはJavaEEコンテナに対するテストを目的としていますが、それは私にとって問題ではありませんでした。

1

サーバーのリンクにこの

/** 
* @parameter 
* */ 
private Server server; 

を定義し、あなたのようなプラグイン

を引用ポンポンでそれを設定することができます。

<configuration> 
<server> 
<serverField1>value1</serverField1> 
<serverField2>value2</serverField2> 
... 
</server> 
</configuration> 

はこちらを参照してください。http://maven.apache.org/guides/plugin/guide-java-plugin-development.html

関連する問題