2

使用 micronaut bom 1.2.10 版本以及 software.amazon.awssdk:lambda:2.10.56 和 software.amazon.awssdk:s3:2.10.56 依赖项创建了一个应用程序,这些依赖项具有从 s3 存储检索数据并使用 graal 19.2 的功能.1 创建原生图像。本机映像已成功创建,但是当我尝试访问端点时,它因以下异常而失败:

failed: org.apache.commons.logging.LogFactoryjava.lang.NoClassDefFoundError: org.apache.commons.logging.LogFactory

以及创建 S3 客户端时的一系列异常。该异常在以下点也失败了:

failed: Could not initialize class software.amazon.awssdk.http.apache.internal.conn.SdkTlsSocketFactoryjava.lang.NoClassDefFoundError: Could not initialize class software.amazon.awssdk.http.apache.internal.conn.SdkTlsSocketFactory

S3Client 的代码:

S3Client s3Client = S3Client.builder().region(getRegion()).build();

构建-native-image.sh

${GRAALVM_HOME}/bin/native-image --no-server -cp example-function-*-all.jar
-H:IncludeResources="git.properties"
-H:IncludeResources="logback.xml"
-H:IncludeResources="application.properties" \
4

2 回答 2

2

因此,通过在 build.gradle 中添加以下配置解决了这个问题:

allprojects {
    configurations {
        all {
            exclude(group = "commons-logging")
        }
    }
}

并在依赖项中添加: compile group: 'org.slf4j', name: 'jcl-over-slf4j', version: '1.7.30'

我希望这有帮助。

于 2020-04-18T06:27:12.710 回答
0

我在运行测试时遇到了同样的问题,使用完全相同的 NoClassDefFoundError 但在使用 AWS sts 和 secretsmanager 库时。我实际上可以通过仅包含依赖项来使其工作jcl-over-slf4j,而使用依赖项时会发生错误slf4j-api。我不需要排除commons-logging. Mavenpom.xml中的依赖片段有效:

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>software.amazon.awssdk</groupId>
                <artifactId>bom</artifactId>
                <version>2.17.89</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>secretsmanager</artifactId>
        </dependency>
        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>sts</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
        </dependency>
    </dependencies>
于 2021-12-16T17:49:05.633 回答