Eclipse:我无法将项目依赖项纳入Tomcat

时间:2016-06-08 21:39:53

标签: eclipse tomcat

我正在使用Eclipse Kepler的Export控件构建一个项目几年。我遇到了一些问题,试图直接跳到我的最终配置(Java 8,Tomcat 8,CXF,并使用Maven进行构建),所以我试图这样做,而且我已经被困了两天。

我正在使用Eclipse Mars.2版本(4.5.2)。

由于历史原因,我有两个项目,MyImpl项目包含所有业务逻辑(也是远程Web服务的客户端/使用者,因此是CXF),以及MyWebApp,一个struts 1动态Web项目。在Java 7 / Tomcat 7中运行良好。我正在尝试介绍Maven,首先进入MyImpl项目,然后进入MyWebApp项目,最后构建Web服务客户端代码。

我将源代码重新排列为maven方式(/ src / main / java,/ src / test / java等)然后我添加了一个包含MyImpl项目所有依赖项的POM.xml。 MyImpl项目构建得很好,MyWebApp项目在Eclipse中引用了MyImpl项目,所以这也很好。一切都建立,没有红色的X.我们的测试用例现在还没有很好地开发,所以我无法运行它们。

当我尝试在Eclipse内部运行Tomcat 7时,Servers选项卡显示Tomcat 7服务器下的MyWebApp项目,但它没有像之前那样在MyWebApp项目下显示MyImpl项目。是的,Java Build Path / Projects显示MyWebApp项目依赖于MyImpl项目。否则它不会建立。

Tomcat无法启动NoClassDefFoundError:

Jun 08, 2016 4:48:55 PM org.apache.catalina.core.ContainerBase startInternal
SEVERE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/WebStarWebApp]]
    at java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.util.concurrent.FutureTask.get(FutureTask.java:188)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1123)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:816)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/MyWebApp]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    ... 6 more
Caused by: java.lang.NoClassDefFoundError: com/mycompany/mygroup/myproject/common/util/DB_Exception
    at java.lang.Class.getDeclaredFields0(Native Method)
...

在MyImpl项目中定义了DB_Exception。

如果我双击服务器,单击“打开启动配置”,单击“类路径”选项卡,我会看到Bootstrap条目下的JRE系统库,以及bootstrap.jar,tomcat-juli.jar和tools.jar在用户条目下。如果我将MyWebApp项目添加到用户条目并启动服务器,则会出现类加载器异常:

Jun 08, 2016 5:20:54 PM org.apache.catalina.core.ApplicationContext log
SEVERE: StandardWrapper.Throwable
java.lang.LinkageError: loader constraint violation: loader (instance of sun/misc/Launcher$AppClassLoader) previously initiated loading for a different type with name "mycompany/common/logging/ISmLog"
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
<stack trace through initialization code>
    at org.apache.struts.action.ActionServlet.initModulePlugIns(ActionServlet.java:1158)
    at org.apache.struts.action.ActionServlet.init(ActionServlet.java:473)
    at javax.servlet.GenericServlet.init(GenericServlet.java:158)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1284)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1197)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1087)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5231)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5518)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

如果不是将MyWebApp项目添加到运行配置中,我只添加MyImpl.jar(挖掘MyImpl项目,选择MyImpl \ target \ MyImpl-1.0.jar),我仍然得到NoClassDefFoundError:

Jun 08, 2016 5:32:07 PM org.apache.catalina.core.ApplicationContext log
SEVERE: StandardWrapper.Throwable
java.lang.NoClassDefFoundError: mycompany/myproject/logging/InstrRecord
    at com.mycompany.myproject.struts.plugins.MyImpl_PlugIn.init(MyImpl_PlugIn.java:55)
    at org.apache.struts.action.ActionServlet.initModulePlugIns(ActionServlet.java:1158)
    at org.apache.struts.action.ActionServlet.init(ActionServlet.java:473)
    at javax.servlet.GenericServlet.init(GenericServlet.java:158)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1284)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1197)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1087)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5231)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5518)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: mycompany/myproject/logging/InstrRecord
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)

这是一个全新的工作区和新的代码库导入。

0 个答案:

没有答案