AWS Lambda java.lang.ClassNotFoundException: com.opencsv.exceptions.CsvException

Я получаю следующую ошибку при запуске кода на AWS lambda:

    START RequestId: cd42e5ab-fbc8-4f50-8c4f-e8257525bd78 Version: $LATEST
Error loading method handler on class com.test.myapp: java.lang.NoClassDefFoundError
java.lang.NoClassDefFoundError: com/opencsv/exceptions/CsvException
    at java.base/java.lang.Class.getDeclaredMethods0(Native Method)
    at java.base/java.lang.Class.privateGetDeclaredMethods(Unknown Source)
    at java.base/java.lang.Class.privateGetPublicMethods(Unknown Source)
    at java.base/java.lang.Class.getMethods(Unknown Source)
Caused by: java.lang.ClassNotFoundException: com.opencsv.exceptions.CsvException. Current classpath: file:/var/task/

Я работаю над IntelliJ, создал JAR и загрузил его в AWS Lambda с помощью консоли.

Это pom.xml:

<?xml version = "1.0" encoding = "UTF-8"?>
<project xmlns = "http://maven.apache.org/POM/4.0.0"
         xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>testerLambda2</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-s3 -->
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-s3</artifactId>
            <version>1.12.204</version>
        </dependency>

        <dependency>
            <groupId>com.opencsv</groupId>
            <artifactId>opencsv</artifactId>
            <version>5.2</version>
        </dependency>

    </dependencies>


    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

</project>

Не знаю, что мне делать. Эта ошибка возникает только тогда, когда я добавляю openCSV, в противном случае моя лямбда работает нормально.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
30
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Загрузите банку FAT или банку с зависимостями в AWS, а затем запустите лямбду.
Используйте сборку maven или шейдерные плагины.
Плагин тени:

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <createDependencyReducedPom>false</createDependencyReducedPom>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            </plugins>
        </build>

Создайте банку FAT с пакетом mvn и разверните.

Не могли бы вы уточнить, как я должен это сделать?

NEELABH SHUKLA 14.05.2022 22:15

Обновил ответ. Добавьте этот плагин в pom и запустите пакет mvn, который сгенерирует jar-файл, включая зависимости (он также может сгенерировать обычный jar-файл, но выберите тот, у которого больше размер, поскольку он имеет зависимости) и разверните.

Prasad Tamgale 14.05.2022 22:18

Для меня он генерирует только один JAR

NEELABH SHUKLA 14.05.2022 22:20

можете ли вы сказать, где может быть местонахождение FAT JAR

NEELABH SHUKLA 14.05.2022 22:22

Да, если вы добавили плагин тени и выполнили «пакет mvn», он создаст только один. Я говорил, что он может генерировать более одного в случае обычной команды mvn install с любыми другими плагинами.

Prasad Tamgale 14.05.2022 22:22

Только в целевой папке у вас будет эта банка с тем же именем, что и раньше. Проверьте размер jar до и после добавления плагина в pom с помощью «mvn package».

Prasad Tamgale 14.05.2022 22:23

Проверьте документы, чтобы добавить плагин тени в проект maven и соответствующим образом создать банку.

Prasad Tamgale 14.05.2022 22:29

Спасибо, это сработало. Вы Спаситель. Да пребудет с тобой сила.

NEELABH SHUKLA 14.05.2022 22:30

Другие вопросы по теме