JavaコードでMavenコンパイルを実行したい。したがって、ここで説明したMavenEmbedderの使用例を使用しました。
これは、Maven Embedderによって書き込まれたすべてのログを自分のロガーにリダイレクトすることを除いて、非常にうまく機能します。だから、私は自分で作成しましたMavenEmbedderLogger
(私のものout
ですPrintStream
):
class MvnLogger extends AbstractMavenEmbedderLogger {
public void error(String s, Throwable throwable) {
out.println("[error] " + s);
print(throwable);
}
public void info(String s, Throwable throwable) {
out.println("[info] " + s);
print(throwable);
}
...
public void close() {
}
private void print(Throwable t) {
if (t != null) {
t.printStackTrace(out);
}
}
}
次に、このロガーをエンベッダーに設定しました。
Configuration config = new DefaultConfiguration();
config.setUserSettingsFile(new File("..."));
config.setClassLoader(Thread.currentThread().getContextClassLoader());
ConfigurationValidationResult validationResult = MavenEmbedder.validateConfiguration(config);
if (validationResult.isValid()) {
try {
MavenEmbedder embedder = new MavenEmbedder(config);
// SET THE LOGGER
embedder.setLogger(new MvnLogger());
MavenExecutionRequest request = new DefaultMavenExecutionRequest();
request.setBaseDirectory(path);
request.setGoals(Arrays.asList(new String[] { "clean", "install" }));
MavenExecutionResult result = embedder.execute(request);
...
ただし、このコードを実行すると、Mavenからのすべてのログが、ロガーではSystem.out
なくデフォルトのロガー(私の場合は)に表示されます。
私は何を間違えますか?