Как исправить "org.apache.commons.logging.impl.LogFactoryImpl", не найденный в основном режиме - PullRequest
0 голосов
/ 03 июля 2019

При запуске службы отдыха в основном режиме я получаю класс org.apache.commons.logging.impl.LogFactoryImpl not found исключение.Он работает нормально с режимом openjdk.

Я написал небольшой сервисный остаток, чтобы устранить проблему.

Служба Rest:

package org.acme.rest.json;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; 

import io.quarkus.deployment.builditem.substrate.ReflectiveClassBuildItem;
import io.quarkus.deployment.annotations.BuildStep;

@Path("/logs")
public class LogResource {
   private Log log = LogFactory.getLog(LogResource.class);
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String hello() {
        log.info("jello");
        return "hello";
    }
}

При вызове этого файла я получаю


xception handling request 04cf25a8-aafb-4b2a-978e-47a24009b22d-1 to /logs: org.jboss.resteasy.spi.UnhandledException: org.apache.commons.logging.LogConfigurationException: java.lang.ClassNotFoundException: org.apache.commons.logging.impl.LogFactoryImpl (Caused by java.lang.ClassNotFoundException: org.apache.commons.logging.impl.LogFactoryImpl)

Ответы [ 2 ]

1 голос
/ 03 июля 2019

Пожалуйста, используйте JBoss Logging вместо Commons Logging:

private static final Logger LOGGER = Logger.getLogger(LogResource.class.getName());

с Logger, являющимся org.jboss.logging.Logger.

Настройка JBoss Logging полностью обеспечивается Quarkus.

Если вы хотите использовать другое средство ведения журнала, вам нужно будет выполнить настройку самостоятельно. В вашем случае вам нужно будет зарегистрировать LogFactoryImpl для отражения, чтобы он работал с GraalVM.

Если вы действительно не хотите использовать JBoss Logging (что, на мой взгляд, является плохой идеей, поскольку в нем есть все необходимые функции), вы должны следовать инструкциям документации GraalVM: https://github.com/oracle/graal/blob/master/substratevm/REFLECTION.md#manual-configuration .

Я рекомендую использовать @AutomaticFeature, поскольку вам просто нужно добавить класс в ваше приложение.

Если вы идете по пути конфигурации JSON, вы можете предоставить некоторые дополнительные аргументы через <additionalBuildArgs> в конфигурации фазы собственного образа Maven.

0 голосов
/ 09 июля 2019

Следуя вашим советам, я запустил его, используя следующий конфиг: pom.xml

    <build>
        <plugins>
          <plugin>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-maven-plugin</artifactId>
            <version>${quarkus.version}</version>
            <executions>
              <execution>
                <goals>
                  <goal>native-image</goal>
                </goals>
                <configuration>
                  <enableHttpUrlHandler>true</enableHttpUrlHandler>
                 <additionalBuildArgs>-H:ReflectionConfigurationFiles=/home/dev/repo/quarkus-mailbox-native//src/main/resources/reflectconfig.json,-H:DynamicProxyConfigurationFiles=/home/dev/repo/quarkus-mailbox-native/src/main/resources/dynamicproxy.json</additionalBuildArgs>
                </configuration>
              </execution>
            </executions>
          </plugin>

reflect.json

[
    {
      "name" : "org.apache.commons.logging.impl.LogFactoryImpl",
      "allDeclaredConstructors" : true,
      "allPublicConstructors" : true,
      "allDeclaredMethods" : true,
      "allPublicMethods" : true,
      "allDeclaredClasses" : true,
      "allPublicClasses" : true
    },
    {
        "name" : "java.lang.String",
        "allDeclaredConstructors" : true,
        "allPublicConstructors" : true,
        "allDeclaredMethods" : true,
        "allPublicMethods" : true,
        "allDeclaredClasses" : true,
        "allPublicClasses" : true
      },
      {
        "name" : "org.apache.commons.logging.LogFactory",
        "allDeclaredConstructors" : true,
        "allPublicConstructors" : true,
        "allDeclaredMethods" : true,
        "allPublicMethods" : true,
        "allDeclaredClasses" : true,
        "allPublicClasses" : true
      },
      {
        "name" : "org.apache.commons.logging.impl.SimpleLog",
        "allDeclaredConstructors" : true,
        "allPublicConstructors" : true,
        "allDeclaredMethods" : true,
        "allPublicMethods" : true,
        "allDeclaredClasses" : true,
        "allPublicClasses" : true
      }
]

Спасибо за вашу помощь.

X.

...