Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logging 为Maven嵌入程序执行设置记录器_Logging_Maven 2_Maven Embedder - Fatal编程技术网

Logging 为Maven嵌入程序执行设置记录器

Logging 为Maven嵌入程序执行设置记录器,logging,maven-2,maven-embedder,Logging,Maven 2,Maven Embedder,我想用Java代码运行Maven编译。因此,我使用了Maven Embedder的用法示例 这非常有效,只是我想将Maven嵌入式程序编写的所有日志重定向到我自己的日志。因此,我创建了自己的mavenembedderloger(out是我的PrintStream): 然后,我将此记录器设置为嵌入式程序: Configuration config = new DefaultConfiguration(); config.setUserSettingsFile(new File(".

我想用Java代码运行Maven编译。因此,我使用了Maven Embedder的用法示例

这非常有效,只是我想将Maven嵌入式程序编写的所有日志重定向到我自己的日志。因此,我创建了自己的
mavenembedderloger
out
是我的
PrintStream
):

然后,我将此记录器设置为嵌入式程序:

    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
)中,而不是我的记录器中


我做错了什么?

好的,我自己发现:记录器必须设置为
配置,而不是
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

    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);