graalvm / native-build-tools

Native-image plugins for various build tools
https://graalvm.github.io/native-build-tools/
Other
349 stars 51 forks source link

Error: Main entry point class not found #535

Open sergey-morenets opened 8 months ago

sergey-morenets commented 8 months ago

Describe the bug

Hi

We couldn't build GraalVM native image for sample Spring Boot application (we used 3.2.0 RC1 or SNAPSHOT versions) and always received an error "Error: Main entry point class 'com.example.demo.DemoApplication' neither found" although this class is entry point and exists in the project.

To Reproduce

Here's plugin configuration:

            <plugin>
                <groupId>org.graalvm.buildtools</groupId>
                <artifactId>native-maven-plugin</artifactId>
                <version>0.9.28</version>
                <executions>
                    <execution>
                        <id>build-native</id>
                        <goals>
                            <goal>build</goal>
                        </goals>
                        <phase>package</phase>
                    </execution>
                    <execution>
                        <id>test-native</id>
                        <goals>
                            <goal>test</goal>
                        </goals>
                        <phase>test</phase>
                    </execution>
                </executions>
            </plugin>

And here's instructions in Dockerfile:

COPY pom.xml /opt/
WORKDIR /opt
RUN --mount=type=cache,target=/root/.m2 mvn dependency:resolve

COPY . /opt/
RUN --mount=type=cache,target=/root/.m2 mvn install spring-boot:repackage

Logs

 [1/8] Initializing...                                                                                    (0.0s @ 0.12GB)
#17 6.117 Error: Main entry point class 'com.example.demo.DemoApplication' neither found on
#17 6.117 classpath: '/opt/target/demo-0.0.1-SNAPSHOT.jar:/root/.m2/repository/org/springframework/boot/spring-boot-starter-web/3.2.0-SNAPSHOT/spring-boot-starter-web-3.2.0-SNAPSHOT.jar:/root/.m2/repository/org/springframework/boot/spring-boot-starter/3.2.0-SNAPSHOT/spring-boot-starter-3.2.0-SNAPSHOT.jar:/root/.m2/repository/org/springframework/boot/spring-boot/3.2.0-SNAPSHOT/spring-boot-3.2.0-SNAPSHOT.jar:/root/.m2/repository/org/springframework/boot/spring-boot-autoconfigure/3.2.0-SNAPSHOT/spring-boot-autoconfigure-3.2.0-SNAPSHOT.jar:/root/.m2/repository/org/springframework/boot/spring-boot-starter-logging/3.2.0-SNAPSHOT/spring-boot-starter-logging-3.2.0-SNAPSHOT.jar:/root/.m2/repository/ch/qos/logback/logback-classic/1.4.11/logback-classic-1.4.11.jar:/root/.m2/repository/ch/qos/logback/logback-core/1.4.11/logback-core-1.4.11.jar:/root/.m2/repository/org/apache/logging/log4j/log4j-to-slf4j/2.21.1/log4j-to-slf4j-2.21.1.jar:/root/.m2/repository/org/apache/logging/log4j/log4j-api/2.21.1/log4j-api-2.21.1.jar:/root/.m2/repository/org/slf4j/jul-to-slf4j/2.0.9/jul-to-slf4j-2.0.9.jar:/root/.m2/repository/jakarta/annotation/jakarta.annotation-api/2.1.1/jakarta.annotation-api-2.1.1.jar:/root/.m2/repository/org/yaml/snakeyaml/2.2/snakeyaml-2.2.jar:/root/.m2/repository/org/springframework/boot/spring-boot-starter-json/3.2.0-SNAPSHOT/spring-boot-starter-json-3.2.0-SNAPSHOT.jar:/root/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.15.3/jackson-databind-2.15.3.jar:/root/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.15.3/jackson-annotations-2.15.3.jar:/root/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.15.3/jackson-core-2.15.3.jar:/root/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.15.3/jackson-datatype-jdk8-2.15.3.jar:/root/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.15.3/jackson-datatype-jsr310-2.15.3.jar:/root/.m2/repository/com/fasterxml/jackson/module/jackson-module-parameter-names/2.15.3/jackson-module-parameter-names-2.15.3.jar:/root/.m2/repository/org/springframework/boot/spring-boot-starter-tomcat/3.2.0-SNAPSHOT/spring-boot-starter-tomcat-3.2.0-SNAPSHOT.jar:/root/.m2/repository/org/apache/tomcat/embed/tomcat-embed-core/10.1.15/tomcat-embed-core-10.1.15.jar:/root/.m2/repository/org/apache/tomcat/embed/tomcat-embed-websocket/10.1.15/tomcat-embed-websocket-10.1.15.jar:/root/.m2/repository/org/springframework/spring-web/6.1.0-RC2/spring-web-6.1.0-RC2.jar:/root/.m2/repository/org/springframework/spring-beans/6.1.0-RC2/spring-beans-6.1.0-RC2.jar:/root/.m2/repository/io/micrometer/micrometer-observation/1.12.0-RC1/micrometer-observation-1.12.0-RC1.jar:/root/.m2/repository/io/micrometer/micrometer-commons/1.12.0-RC1/micrometer-commons-1.12.0-RC1.jar:/root/.m2/repository/org/springframework/spring-webmvc/6.1.0-RC2/spring-webmvc-6.1.0-RC2.jar:/root/.m2/repository/org/springframework/spring-aop/6.1.0-RC2/spring-aop-6.1.0-RC2.jar:/root/.m2/repository/org/springframework/spring-context/6.1.0-RC2/spring-context-6.1.0-RC2.jar:/root/.m2/repository/org/springframework/spring-expression/6.1.0-RC2/spring-expression-6.1.0-RC2.jar:/root/.m2/repository/org/springframework/boot/spring-boot-starter-data-mongodb/3.2.0-SNAPSHOT/spring-boot-starter-data-mongodb-3.2.0-SNAPSHOT.jar:/root/.m2/repository/org/mongodb/mongodb-driver-sync/4.11.0/mongodb-driver-sync-4.11.0.jar:/root/.m2/repository/org/mongodb/bson/4.11.0/bson-4.11.0.jar:/root/.m2/repository/org/mongodb/mongodb-driver-core/4.11.0/mongodb-driver-core-4.11.0.jar:/root/.m2/repository/org/mongodb/bson-record-codec/4.11.0/bson-record-codec-4.11.0.jar:/root/.m2/repository/org/springframework/data/spring-data-mongodb/4.2.0-RC1/spring-data-mongodb-4.2.0-RC1.jar:/root/.m2/repository/org/springframework/spring-tx/6.1.0-RC2/spring-tx-6.1.0-RC2.jar:/root/.m2/repository/org/springframework/data/spring-data-commons/3.2.0-RC1/spring-data-commons-3.2.0-RC1.jar:/root/.m2/repository/org/slf4j/slf4j-api/2.0.9/slf4j-api-2.0.9.jar:/root/.m2/repository/org/springframework/boot/spring-boot-starter-validation/3.2.0-SNAPSHOT/spring-boot-starter-validation-3.2.0-SNAPSHOT.jar:/root/.m2/repository/org/apache/tomcat/embed/tomcat-embed-el/10.1.15/tomcat-embed-el-10.1.15.jar:/root/.m2/repository/org/hibernate/validator/hibernate-validator/8.0.1.Final/hibernate-validator-8.0.1.Final.jar:/root/.m2/repository/jakarta/validation/jakarta.validation-api/3.0.2/jakarta.validation-api-3.0.2.jar:/root/.m2/repository/org/jboss/logging/jboss-logging/3.5.3.Final/jboss-logging-3.5.3.Final.jar:/root/.m2/repository/com/fasterxml/classmate/1.6.0/classmate-1.6.0.jar:/root/.m2/repository/org/projectlombok/lombok/1.18.30/lombok-1.18.30.jar:/root/.m2/repository/org/springframework/spring-core/6.1.0-RC2/spring-core-6.1.0-RC2.jar:/root/.m2/repository/org/springframework/spring-jcl/6.1.0-RC2/spring-jcl-6.1.0-RC2.jar' nor
#17 6.117 modulepath: '/usr/lib64/graalvm/graalvm-community-java21/lib/svm/library-support.jar'.

System Info (please complete the following information):

wilkinsona commented 7 months ago

Assuming that /opt/target/demo-0.0.1-SNAPSHOT.jar is a Spring Boot uber jar, the native image compiler will not be able to find the classes that it contains as they're located in BOOT-INF/classes, not the root of the jar.

Have you considered using or taking inspiration from the native profile that's provided by spring-boot-starter-parent?