1

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なくデフォルトのロガー(私の場合は)に表示されます。

私は何を間違えますか?

4

1 に答える 1

2

わかりました。自分で見つけました。ロガーはクラスConfigurationではなく、に設定する必要があります。MavenEmbedder

    Configuration config = new DefaultConfiguration();
    // SET THE LOGGER HERE !
    config.setMavenEmbedderLogger(new MvnLogger());
    config.setUserSettingsFile(new File(...));
    config.setClassLoader(Thread.currentThread().getContextClassLoader());
    ConfigurationValidationResult validationResult = MavenEmbedder.validateConfiguration(config);
    if (validationResult.isValid()) {
        try {
            MavenEmbedder embedder = new MavenEmbedder(config);
            // AND NOT HERE!
            // embedder.setLogger(new MvnLogger());
            MavenExecutionRequest request = new DefaultMavenExecutionRequest();
            request.setBaseDirectory(path);
            request.setGoals(Arrays.asList(new String[] { "clean", "install" }));
            // request.setProperties();
            MavenExecutionResult result = embedder.execute(request);

ただし、以前のコードでは、代わりにロガーが使用されなかったのは非常に奇妙ですSystem.out...

于 2009-10-27T15:59:57.790 に答える