On Wed, Dec 20, 2023 at 5:33 AM Jun Suzuki <junsuzuki1...@gmail.com> wrote: > > 2023年12月19日(火) 16:11 Jun Suzuki <junsuzuki1...@gmail.com>: > > > > 2023年12月19日(火) 1:18 Rémy Maucherat <r...@apache.org>: > > > > > > On Mon, Dec 18, 2023 at 1:28 PM Jun Suzuki <junsuzuki1...@gmail.com> > > > wrote: > > > > > > > > Hello all, > > > > > > > > I'm now following the guide of > > > > https://tomcat.apache.org/tomcat-11.0-doc/graal.html to build Tomcat > > > > into native image. > > > > The original thread I posted before has become too long to be easily > > > > understood, so please let me raise a new thread to clarify. > > > > I break down the contents from the guide into a step-by-step > > > > procedure, and I would appreciate it if you can verify the steps and > > > > check for the issues. > > > > > > > > [Environment]: Tomcat 10.0.27, Ant 1.10.14, Maven 3.6.3, GraalVM EE > > > > 21.x+Java17 > > > > [Steps]: > > > > 1. Download the stuffed folder according to the guide. > > > > 2. Edit the original pom to align with the Tomcat and JDK version: > > > > <properties> > > > > > > > > <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> > > > > <mainClass>org.apache.catalina.startup.Tomcat</mainClass> > > > > <tomcat.version>10.0.27</tomcat.version> > > > > </properties> > > > > .................. > > > > <plugin> > > > > <groupId>org.apache.maven.plugins</groupId> > > > > <artifactId>maven-compiler-plugin</artifactId> > > > > <version>3.11.0</version> > > > > <configuration> > > > > <release>11</release> > > > > </configuration> > > > > </plugin> > > > > 3. Copy conf and webapps folders from Tomcat to the stuffed folder. > > > > 4. Edit the logging properties(Deleted all Juli-related statements to > > > > avoid runtime error) > > > > handlers = java.util.logging.ConsoleHandler > > > > .handlers = java.util.logging.ConsoleHandler > > > > ............................. > > > > java.util.logging.ConsoleHandler.level = FINE > > > > # java.util.logging.ConsoleHandler.formatter = > > > > org.apache.juli.OneLineFormatter > > > > java.util.logging.ConsoleHandler.encoding = UTF-8 > > > > 5. Build and packaging. > > > > mvn package > > > > ant -Dwebapp.name=ROOT -f webapp-jspc.ant.xml > > > > ant -Dwebapp.name=manager -f webapp-jspc.ant.xml > > > > ant -Dwebapp.name=examples -f webapp-jspc.ant.xml > > > > > > > > Until here everything was running fine without error. And when I > > > > executed the next command, error message displayed as below: > > > > mvn package > > > > .......................................................................................................... > > > > [INFO] --- maven-compiler-plugin:3.11.0:compile (default-compile) @ > > > > tomcat-stuffed --- > > > > [INFO] Changes detected - recompiling the module! :source > > > > [INFO] Compiling 130 source files with javac [debug release 17] to > > > > target/classes > > > > [INFO] > > > > /home/opc/project/tomcat-native/stuffed/src/main/java/manager/org/apache/jsp/WEB_002dINF/jsp/sessionsList_jsp.java: > > > > Some input files use unchecked or unsafe operations. > > > > [INFO] > > > > /home/opc/project/tomcat-native/stuffed/src/main/java/manager/org/apache/jsp/WEB_002dINF/jsp/sessionsList_jsp.java: > > > > Recompile with -Xlint:unchecked for details. > > > > [INFO] Some messages have been simplified; recompile with > > > > -Xdiags:verbose to get full output > > > > [INFO] ------------------------------------------------------------- > > > > [ERROR] COMPILATION ERROR : > > > > [INFO] ------------------------------------------------------------- > > > > [ERROR] > > > > /home/opc/project/tomcat-native/stuffed/src/main/java/examples/org/apache/jsp/jsp/tagplugin/choose_jsp.java:[162,210] > > > > cannot access javax.servlet.jsp.tagext.TagSupport > > > > class file for javax.servlet.jsp.tagext.TagSupport not found > > > > [ERROR] > > > > /home/opc/project/tomcat-native/stuffed/src/main/java/examples/org/apache/jsp/jsp/tagplugin/choose_jsp.java:[165,35] > > > > cannot access javax.servlet.jsp.tagext.Tag > > > > class file for javax.servlet.jsp.tagext.Tag not found > > > > .......................................................................................................... > > > > > > > > Could you please help to indicate what I have missed from the above > > > > steps? > > > > And I would really appreciate it if you could offer some kind of > > > > step-by-step hands-on examples about how to practice to run Tomcat as > > > > native image. > > > > > > This seems unrelated, you are apparently trying to run an EE8 webapp > > > (the examples from Tomcat 9) on a EE10 container. The package names > > > for the APIs changed to jakarta.*. > > > > > > Rémy > > > > > > > Thank you for the comments. > > To avoid excessive trial and error, is it possible to provide a > > combination of tested versions that ensure default Tomcat examples > > running in native image without error? > > Could you please indicate the version of Tomcat, GraalVM(EE or CE), > > JDK, maven, ant? I want to use these specific versions you pointed to > > make sure default Tomcat examples will run normally in term of native > > image without additional customization. > > Thank you in advance. > > Jun > > Hi, I have accomplished each steps from the guide to packaging a > simple war file(containing a single servlet which is entry point from > web access) without error, except for last step of executing produced > native image: > SEVERE: Allocate exception for servlet [GreetingServlet] > com.oracle.svm.core.jdk.UnsupportedFeatureError: No classes have been > predefined during the image build to load from bytecodes at runtime. > at > org.graalvm.nativeimage.builder/com.oracle.svm.core.util.VMError.unsupportedFeature(VMError.java:121) > at > org.graalvm.nativeimage.builder/com.oracle.svm.core.hub.PredefinedClassesSupport.throwNoBytecodeClasses(PredefinedClassesSupport.java:76) > at > org.graalvm.nativeimage.builder/com.oracle.svm.core.hub.PredefinedClassesSupport.loadClass(PredefinedClassesSupport.java:130) > at > java.base@21/java.lang.ClassLoader.defineClass(ClassLoader.java:280) > at > java.base@21/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150) > ....................................................................... > > I checked the source/main/java folder which is supposed to contain > pre-generated code, but it looks like only index_jsp.java is existing. > Whether servlet should also be pre-generated? And whether the error > came from the missing of pre-generated servlet? > I would appreciate your finding and insight about this issue.
This error message seems rather new, but basically it most likely means the bytecode is not there. One important thing to always remember is that ultimately all the classes bytecode MUST end up in the target/tomcat-stuffed-1.0.jar. If some library or Servlet class or whatever is used by your webapp is not there, then it won't work in the end. This could be true in particular for webapp classes which could be provided as dependencies in the main pom, or some script could copy them to target/classes (webapp-jspc.ant.xml does that kind of work for precompiled JSPs for example, copying the code to src/main/java so that then then get compiled through Maven), and so on. Do you feel like this could be improved by having webapp-jspc.ant.xml attempt to do that work ? Ideally I thought using Maven to handle the classes is better. I have retested Tomcat with GraalVM 21 and the ROOT webapp (with its single JSP). Generating the native image worked and the JSP works as well, so this covers the basic functionality of Tomcat. I did modernize the command line in the docs due to some warnings, but without any functional change. That can be expected from time to time, some options might get modified. Rémy > Thank you > Jun > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > For additional commands, e-mail: users-h...@tomcat.apache.org > --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org