【问题标题】:Add maven dependencies to weblogic classpath将 maven 依赖项添加到 weblogic 类路径
【发布时间】:2016-11-27 09:27:40
【问题描述】:

我们正在使用 Maven 进行依赖管理。

Eclipse 和 maven 识别我们所有的 maven 依赖项。

当我们尝试在开发中使用 WebLogic 10 进行测试时,它无法识别 maven 依赖项。

java.lang.NoClassDefFoundError: com/google/gson/Gson
    at com.example.HelloWorldService.convertFtoC(HelloWorldService.java:92)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
    at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:205)
    at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
    at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302)
    at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
    at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
    at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
    at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1542)
    at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1473)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1419)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1409)
    at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:409)
    at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:558)
    at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:733)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:301)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:184)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3732)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3696)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
    at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2273)
    at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2179)
    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1490)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)

所以我的问题是如何让 WebLogic 10 识别 Maven 依赖项

编辑: 这是我的 pom.xml:

<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>com.stackoverflow</groupId>
    <artifactId>Question</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>asm</groupId>
            <artifactId>asm-all</artifactId>
            <version>3.3.1</version>
        </dependency>
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-bundle</artifactId>
            <version>1.14</version>
        </dependency>
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20090211</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.3.7.Final</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.3.1</version>
            <scope>provided</scope>
        </dependency>

    </dependencies>

    <build>
        <sourceDirectory>src</sourceDirectory>
        <resources>
            <resource>
                <directory>src</directory>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.3</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>

            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>fully.qualified.MainClass</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

【问题讨论】:

  • 检查 gson Jar 是否在您部署的 War/Eear 中。您还可以显示您的 pom.xml 并解释您在 Weblogic 上的部署方式
  • @davidxxx Eclipse 从 Maven 依赖项中识别出 Gson 类。问题是 WebLogic 无法从 maven 依赖项中找到 JARS。
  • 您使用 Weblogic 部署了一个可执行 jar,或者 pom.xml 不是您真正声明的?

标签: java eclipse maven weblogic weblogic-10.x


【解决方案1】:

这里:

    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.3.1</version>
        <scope>provided</scope>
    </dependency>

您使用provided 范围。这意味着该依赖不会包含在当前pom的package目标生成的工件的打包中。

你应该像这样声明依赖:

    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.3.1</version>
    </dependency>

如果未指定,则范围具有runtime 值。也就是说,它包含在包装中。

【讨论】:

  • 感谢您的回答。即使删除&lt;scope&gt;provided&lt;/scope&gt;,我仍然收到java.lang.NoClassDefFoundError: com/google/gson/Gson
  • 你部署什么?罐子还是战争?
  • 该项目旨在作为 JAR 部署到更大项目的 WEB-INF/lib 目录中。该项目有一些提供给我们的 JAR(我们为它们使用 &lt;scope&gt;provided&lt;/scope&gt;)和一些我们捆绑到具有依赖关系的 JAR 中的 JAR(那些我们不为它们使用 &lt;scope&gt;provided&lt;/scope&gt; 的 JAR)。
  • Maven 成功构建了一个 JAR,其依赖项没有我们预期的 &lt;scope&gt;provided&lt;/scope&gt;。问题是当我们运行服务器进行开发时,WebLogic 无法识别它们(我们不会在开发中将构建的 JAR 部署到 WebLogic)。
  • 在 Weblogic 上,您可以将 Ear、War 或 Jar 部署为 Ejb 和库。您不能使用具有静态 void main(args[]) 的类部署可执行 Jar。
猜你喜欢
  • 1970-01-01
  • 2017-01-14
  • 1970-01-01
  • 2017-09-18
  • 2016-04-09
  • 2014-11-18
  • 2011-02-01
  • 2014-01-09
  • 1970-01-01
相关资源
最近更新 更多