Установите регистратор для выполнения Maven Embedder - PullRequest
1 голос
/ 27 октября 2009

Я хочу запустить компиляцию Maven с помощью моего кода Java. Таким образом, я использовал пример использования Maven Embedder, объясненный здесь .

Это работает довольно хорошо, за исключением того, что я хочу перенаправить весь журнал, написанный Maven Embedder, в мой собственный Logger. Итак, я создал свой 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);
        }
    }

}

и затем я установил этот регистратор в Embedder:

    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 отображаются в Logger по умолчанию (в моем случае, System.out) вместо моего Logger.

Что я делаю не так?

1 Ответ

2 голосов
/ 27 октября 2009

Хорошо, я только что нашел: Регистратор должен быть установлен на 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);

Однако довольно странно, что с моим предыдущим кодом Logger не использовался вместо System.out ...

...