admin管理员组

文章数量:1316688

I have a small kotlin project using Javalin and JTE as a renderer. The project is managed with maven and below is the pom.xml.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi=";
         xmlns=".0.0"
         xsi:schemaLocation=".0.0 .0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>tech.bobdudan</groupId>
    <artifactId>recipes</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <kotlin.code.style>official</kotlin.code.style>
        <kotlinpiler.jvmTarget>21</kotlinpiler.jvmTarget>
    </properties>

    <repositories>
        <repository>
            <id>mavenCentral</id>
            <url>/</url>
        </repository>
    </repositories>

    <build>
        <sourceDirectory>src/main/kotlin</sourceDirectory>
        <testSourceDirectory>src/test/kotlin</testSourceDirectory>
        <plugins>
            <plugin>
                <groupId>.jetbrains.kotlin</groupId>
                <artifactId>kotlin-maven-plugin</artifactId>
                <version>1.9.23</version>
                <executions>
                    <execution>
                        <id>compile</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>test-compile</id>
                        <phase>test-compile</phase>
                        <goals>
                            <goal>test-compile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.2</version>
            </plugin>
            <plugin>
                <artifactId>maven-failsafe-plugin</artifactId>
                <version>2.22.2</version>
            </plugin>
            <plugin>
                <groupId>.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.6.0</version>
                <configuration>
                    <mainClass>tech.bobdudan.recipes.AppKt</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>io.javalin</groupId>
            <artifactId>javalin</artifactId>
            <version>6.4.0</version>
        </dependency>
        <dependency>
            <groupId>io.javalin</groupId>
            <artifactId>javalin-rendering</artifactId>
            <version>6.4.0</version>
        </dependency>
        <dependency>
            <groupId>.eclipse.angus</groupId>
            <artifactId>angus-mail</artifactId>
            <version>2.0.1</version>
        </dependency>
        <dependency>
            <groupId>gg.jte</groupId>
            <artifactId>jte</artifactId>
            <version>3.1.16</version>
        </dependency>
        <dependency>
            <groupId>gg.jte</groupId>
            <artifactId>jte-kotlin</artifactId>
            <version>3.1.16</version>
        </dependency>
        <dependency>
            <groupId>.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.7.5</version>
        </dependency>
        <dependency>
            <groupId>.ktorm</groupId>
            <artifactId>ktorm-support-postgresql</artifactId>
            <version>4.1.1</version>
        </dependency>
        <dependency>
            <groupId>.ktorm</groupId>
            <artifactId>ktorm-core</artifactId>
            <version>4.1.1</version>
        </dependency>
        <dependency>
            <groupId>.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>2.0.16</version>
        </dependency>
        <dependency>
            <groupId>.jetbrains.kotlin</groupId>
            <artifactId>kotlin-test-junit5</artifactId>
            <version>1.9.23</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.10.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>.jetbrains.kotlin</groupId>
            <artifactId>kotlin-stdlib</artifactId>
            <version>1.9.23</version>
        </dependency>
    </dependencies>

</project>

When I run it in my IDE (IntelliJ IDEA) I have no issue. However, when I build it and run it using maven in the cli (mvn clean install and then mvn exec:java), the server starts correctly and handles correctly static ressources (like images or css files), but throws the following error when rendering a jte template :

[JettyServerThreadPool-42] ERROR io.javalin.Javalin - Fatal error occurred while servicing http-request
java.lang.NoClassDefFoundError: gg/jte/html/HtmlTemplateOutput
    at java.base/java.lang.Class.getDeclaredMethods0(Native Method)
    at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3578)
    at java.base/java.lang.Class.getDeclaredMethods(Class.java:2676)
    at gg.jte.runtime.Template.findRenderMethods(Template.java:69)
    at gg.jte.runtime.Template.<init>(Template.java:26)
    at gg.jte.runtime.TemplateLoader.load(TemplateLoader.java:26)
    at gg.jtepiler.TemplateCompiler.load(TemplateCompiler.java:51)
    at gg.jte.TemplateEngine.lambda$resolveTemplateOnDemand$0(TemplateEngine.java:354)
    at java.base/java.util.concurrent.ConcurrentHashMappute(ConcurrentHashMap.java:1916)
    at gg.jte.TemplateEngine.resolveTemplateOnDemand(TemplateEngine.java:347)
    at gg.jte.TemplateEngine.resolveTemplate(TemplateEngine.java:337)
    at gg.jte.TemplateEngine.render(TemplateEngine.java:228)
    at io.javalin.rendering.template.JavalinJte.render(JavalinJte.kt:38)
    at io.javalin.http.Context.render(Context.kt:509)
    at tech.bobdudan.recipes.infrastruture.controller.RecipeController.serveList$lambda$0(RecipeController.kt:18)
    at io.javalin.router.Endpoint.handle(Endpoint.kt:52)
    at io.javalin.router.ParsedEndpoint.handle(ParsedEndpoint.kt:15)
    at io.javalin.http.servlet.DefaultTasks.HTTP$lambda$9$lambda$7$lambda$6(DefaultTasks.kt:52)
    at io.javalin.http.servlet.JavalinServlet.handleTask(JavalinServlet.kt:99)
    at io.javalin.http.servlet.JavalinServlet.handleSync(JavalinServlet.kt:64)
    at io.javalin.http.servlet.JavalinServlet.handle(JavalinServlet.kt:50)
    at io.javalin.http.servlet.JavalinServlet.service(JavalinServlet.kt:30)
    at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:587)
    at io.javalin.jetty.JavalinJettyServlet.service(JavalinJettyServlet.kt:52)
    at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:587)
    at .eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:764)
    at .eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:529)
    at .eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:221)
    at .eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1580)
    at .eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:221)
    at .eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1381)
    at .eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:176)
    at .eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:484)
    at .eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1553)
    at .eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:174)
    at .eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1303)
    at .eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:129)
    at .eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:173)
    at .eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122)
    at .eclipse.jetty.server.Server.handle(Server.java:563)
    at .eclipse.jetty.server.HttpChannel$RequestDispatchable.dispatch(HttpChannel.java:1598)
    at .eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:753)
    at .eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:501)
    at .eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:287)
    at .eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:314)
    at .eclipse.jetty.io.FillInterest.fillable(FillInterest.java:100)
    at .eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)
    at .eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:969)
    at .eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1194)
    at .eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1149)
    at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.lang.ClassNotFoundException: gg.jte.html.HtmlTemplateOutput
    at java.base/java.URLClassLoader.findClass(URLClassLoader.java:445)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:593)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
    ... 51 more

What am I mising here ?

I have a small kotlin project using Javalin and JTE as a renderer. The project is managed with maven and below is the pom.xml.

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

    <groupId>tech.bobdudan</groupId>
    <artifactId>recipes</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <kotlin.code.style>official</kotlin.code.style>
        <kotlinpiler.jvmTarget>21</kotlinpiler.jvmTarget>
    </properties>

    <repositories>
        <repository>
            <id>mavenCentral</id>
            <url>https://repo1.maven./maven2/</url>
        </repository>
    </repositories>

    <build>
        <sourceDirectory>src/main/kotlin</sourceDirectory>
        <testSourceDirectory>src/test/kotlin</testSourceDirectory>
        <plugins>
            <plugin>
                <groupId>.jetbrains.kotlin</groupId>
                <artifactId>kotlin-maven-plugin</artifactId>
                <version>1.9.23</version>
                <executions>
                    <execution>
                        <id>compile</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>test-compile</id>
                        <phase>test-compile</phase>
                        <goals>
                            <goal>test-compile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.2</version>
            </plugin>
            <plugin>
                <artifactId>maven-failsafe-plugin</artifactId>
                <version>2.22.2</version>
            </plugin>
            <plugin>
                <groupId>.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.6.0</version>
                <configuration>
                    <mainClass>tech.bobdudan.recipes.AppKt</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>io.javalin</groupId>
            <artifactId>javalin</artifactId>
            <version>6.4.0</version>
        </dependency>
        <dependency>
            <groupId>io.javalin</groupId>
            <artifactId>javalin-rendering</artifactId>
            <version>6.4.0</version>
        </dependency>
        <dependency>
            <groupId>.eclipse.angus</groupId>
            <artifactId>angus-mail</artifactId>
            <version>2.0.1</version>
        </dependency>
        <dependency>
            <groupId>gg.jte</groupId>
            <artifactId>jte</artifactId>
            <version>3.1.16</version>
        </dependency>
        <dependency>
            <groupId>gg.jte</groupId>
            <artifactId>jte-kotlin</artifactId>
            <version>3.1.16</version>
        </dependency>
        <dependency>
            <groupId>.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.7.5</version>
        </dependency>
        <dependency>
            <groupId>.ktorm</groupId>
            <artifactId>ktorm-support-postgresql</artifactId>
            <version>4.1.1</version>
        </dependency>
        <dependency>
            <groupId>.ktorm</groupId>
            <artifactId>ktorm-core</artifactId>
            <version>4.1.1</version>
        </dependency>
        <dependency>
            <groupId>.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>2.0.16</version>
        </dependency>
        <dependency>
            <groupId>.jetbrains.kotlin</groupId>
            <artifactId>kotlin-test-junit5</artifactId>
            <version>1.9.23</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.10.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>.jetbrains.kotlin</groupId>
            <artifactId>kotlin-stdlib</artifactId>
            <version>1.9.23</version>
        </dependency>
    </dependencies>

</project>

When I run it in my IDE (IntelliJ IDEA) I have no issue. However, when I build it and run it using maven in the cli (mvn clean install and then mvn exec:java), the server starts correctly and handles correctly static ressources (like images or css files), but throws the following error when rendering a jte template :

[JettyServerThreadPool-42] ERROR io.javalin.Javalin - Fatal error occurred while servicing http-request
java.lang.NoClassDefFoundError: gg/jte/html/HtmlTemplateOutput
    at java.base/java.lang.Class.getDeclaredMethods0(Native Method)
    at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3578)
    at java.base/java.lang.Class.getDeclaredMethods(Class.java:2676)
    at gg.jte.runtime.Template.findRenderMethods(Template.java:69)
    at gg.jte.runtime.Template.<init>(Template.java:26)
    at gg.jte.runtime.TemplateLoader.load(TemplateLoader.java:26)
    at gg.jtepiler.TemplateCompiler.load(TemplateCompiler.java:51)
    at gg.jte.TemplateEngine.lambda$resolveTemplateOnDemand$0(TemplateEngine.java:354)
    at java.base/java.util.concurrent.ConcurrentHashMappute(ConcurrentHashMap.java:1916)
    at gg.jte.TemplateEngine.resolveTemplateOnDemand(TemplateEngine.java:347)
    at gg.jte.TemplateEngine.resolveTemplate(TemplateEngine.java:337)
    at gg.jte.TemplateEngine.render(TemplateEngine.java:228)
    at io.javalin.rendering.template.JavalinJte.render(JavalinJte.kt:38)
    at io.javalin.http.Context.render(Context.kt:509)
    at tech.bobdudan.recipes.infrastruture.controller.RecipeController.serveList$lambda$0(RecipeController.kt:18)
    at io.javalin.router.Endpoint.handle(Endpoint.kt:52)
    at io.javalin.router.ParsedEndpoint.handle(ParsedEndpoint.kt:15)
    at io.javalin.http.servlet.DefaultTasks.HTTP$lambda$9$lambda$7$lambda$6(DefaultTasks.kt:52)
    at io.javalin.http.servlet.JavalinServlet.handleTask(JavalinServlet.kt:99)
    at io.javalin.http.servlet.JavalinServlet.handleSync(JavalinServlet.kt:64)
    at io.javalin.http.servlet.JavalinServlet.handle(JavalinServlet.kt:50)
    at io.javalin.http.servlet.JavalinServlet.service(JavalinServlet.kt:30)
    at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:587)
    at io.javalin.jetty.JavalinJettyServlet.service(JavalinJettyServlet.kt:52)
    at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:587)
    at .eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:764)
    at .eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:529)
    at .eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:221)
    at .eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1580)
    at .eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:221)
    at .eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1381)
    at .eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:176)
    at .eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:484)
    at .eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1553)
    at .eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:174)
    at .eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1303)
    at .eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:129)
    at .eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:173)
    at .eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122)
    at .eclipse.jetty.server.Server.handle(Server.java:563)
    at .eclipse.jetty.server.HttpChannel$RequestDispatchable.dispatch(HttpChannel.java:1598)
    at .eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:753)
    at .eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:501)
    at .eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:287)
    at .eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:314)
    at .eclipse.jetty.io.FillInterest.fillable(FillInterest.java:100)
    at .eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)
    at .eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:969)
    at .eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1194)
    at .eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1149)
    at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.lang.ClassNotFoundException: gg.jte.html.HtmlTemplateOutput
    at java.base/java.URLClassLoader.findClass(URLClassLoader.java:445)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:593)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
    ... 51 more

What am I mising here ?

Share Improve this question asked Jan 29 at 9:25 Bob DudanBob Dudan 973 silver badges9 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 0

You must be using IntelliJ jte plugin, which takes care of generating source, precompiling, etc. Hence it works fine in IDE.

To build and run using CLI, you can configure the maven plugin for jte.

Refer to this possibly related issue.

本文标签: kotlinNoClassDefFound when trying to render a jte templateStack Overflow