GlassFish / Payara-定义的Maven依赖项引发ClassNotFoundException

时间:2019-04-19 17:19:57

标签: maven java-ee glassfish maven-3 dependency-management

我正在使用maven作为构建工具来构建基于Java EE的小型Web应用程序。作为应用程序服务器,我使用GlassFish 5 / Payara5。

当前版本的编译以及部署都可以正常进行。调用某些REST端点也可以正常工作。仅当我调用使用第三方库资源的REST端点时(在本例中为HtmlUnit),我才会收到以下错误StackTrace。

我可以直接与不基于EE的应用程序进行比较,在该应用程序中,此配置效果很好。

我检查了Maven特定的错误源,例如提供/编译的作用域标签问题,但没有发现任何错误。在应用程序本身中,库类仅被调用或实例化,因此这不应该成为问题。

我怀疑Java EE框架中存在错误源,但由于经验不足,我根本找不到它。

pom.xml的摘录:

<dependencies>
        <!-- https://mvnrepository.com/artifact/javax/javaee-api -->
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>8.0</version>
            <scope>provided</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/net.sourceforge.htmlunit/htmlunit -->
        <dependency>
            <groupId>net.sourceforge.htmlunit</groupId>
            <artifactId>htmlunit</artifactId>
            <version>2.34.1</version>
        </dependency>

...
</dependencies>

StackTrace的摘录:

[2019-04-19T19:00:11.284+0200] [glassfish 5.0] [WARNING] [] [javax.enterprise.web] [tid: _ThreadID=27 _ThreadName=http-listener-1(3)] [timeMillis: 1555693211284] [levelValue: 900] [[
  StandardWrapperValve[com.webanalytics.toolbox.api.rest.scraperequest.RestRequestConfig]: Servlet.service() for servlet com.webanalytics.toolbox.api.rest.scraperequest.RestRequestConfig threw exception
java.lang.ClassNotFoundException: com.gargoylesoftware.htmlunit.html.HtmlPage
    at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1621)
    at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1471)

1 个答案:

答案 0 :(得分:0)

我设法解决了这个问题。这是因为在Maven构建过程中,库只是简单地打包到ear目录的顶层而不是lib目录。解决方案是在父pom.xml中的-tag中添加。

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-ear-plugin</artifactId>
                <version>3.0.0</version>
                <configuration>
                    <version>8</version>
                    <defaultLibBundleDir>lib</defaultLibBundleDir>
                    <modules>
                        <webModule>
                            <groupId>com.webanalytics-toolbox</groupId>
                            <artifactId>scraper-web</artifactId>
                            <contextRoot>/</contextRoot>
                        </webModule>
                    </modules>
                </configuration>
            </plugin>