2

ビルドファイルをantからmavenプラグインに変換しています。Maven プラグインでデータベース (hsqldb) を開始/停止しようとしています。

データベースの起動に成功しました。しかし、プラグインが実行されると、プラグインはデータベースを停止すると考えています。データベースは実行後も実行を続けるはずですが、すぐに停止するようです。

私たちの推測では、'fork' および 'spawn' 属性を使用する必要があります (これらは ant の build.xml にもあります) が、DatabaseController (これはAbstractMojo から拡張されています)。

何か案は?

hsqldb を使用しています。これを初期化するコードは次のとおりです。

hsqlServer = new Server();

hsqlServer.setLogWriter(null);
hsqlServer.setSilent(true);

hsqlServer.setDatabaseName(0, "database");
hsqlServer.setDatabasePath(0, "file:data/database");

getLog().info("Starting server!");
hsqlServer.start();

プラグインを実行すると、データベースが起動し、テーブルを作成してデータを書き込むことさえできました。その後、プラグインが停止し、サーバーも自動的に停止します。

サーバーを停止する別のプラグインを実行すると、次の行で常に nullPointerException が発生します。

hsqlServer.stop();

敬具、

ジェローン

4

2 に答える 2

0

できることの 1 つは、新しい Java プロセスのフォークを行う既存の Maven プラグインを調べることです。Maven-surefire-plugin の場合、同様のことを行います。forkModeSurefire には、分岐を制御するという構成 (pom.xml で指定されます) があります。それを理解するには、プラグインのソース(コードを svn チェックアウト) を調べなければならない場合があります。私はsurefireにあまり詳しくありません。しかし、手始めとして、次のクラス ( #fork( Object testSet, Properties...)を読むことができます。

./maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/ForkStarter.java
于 2011-08-04T15:06:03.133 に答える
0

Maven で実行されるすべてのコードは、別のプロセスでフォークされます。私はいくつかのプロジェクト領域でプロセスを操作しましたが、それに関する明確なドキュメントがありません。コードを次のように呼び出すことができます。

Thread.currentThread().setDaemon(true);
hsqlServer = new Server();

hsqlServer.setLogWriter(null);
hsqlServer.setSilent(true);

hsqlServer.setDatabaseName(0, "database");
hsqlServer.setDatabasePath(0, "file:data/database");

getLog().info("Starting server!");
hsqlServer.start();

デーモン スレッドを使用すると、Maven はコードをバックグラウンドで実行することができます。推測ですが、試してみてください。

于 2012-01-18T14:20:12.620 に答える