[英]Error while deploying and running spring app in RAD 8 when selecting Run server with resources within workspace
My application has four small projects: 我的申请有四个小项目:
I am using RAD 8, Deployment works correctly when I select to run the application with the Publishing settings for Websphere " Run server with resources on Server
" in RAD8. 我正在使用RAD 8,当我选择使用RAD8中的Websphere“
Run server with resources on Server
”的发布设置运行应用程序时,部署正常工作。
However when I try do the same with "`Run server with resources within the workspace" and open the application in my Browser it fails with this error message: 但是,当我尝试使用“使用工作区内的资源运行服务器”并在浏览器中打开应用程序时,它会失败,并显示以下错误消息:
[6/1/13 1:44:04:678 EDT] 0000001c annotations W com.ibm.ws.amm.scan.context.ScannerContextImpl getInputDataForClass Failed to open resource [ org/springframework/web/context/ContextLoaderListener.class ] from module [ abc-web.war ]
[6/1/13 1:44:04:678 EDT] 0000001c annotations W com.ibm.ws.amm.scan.context.ScannerContextImpl getInputDataForClass Class loader [ org.eclipse.jst.j2ee.commonarchivecore.internal.util.WarFileDynamicClassLoader@64662b13 ]
[6/1/13 1:44:04:678 EDT] 0000001c annotations W com.ibm.ws.amm.scan.context.ScannerContextImpl getInputDataForClass Class loader [ com.ibm.ws.bootstrap.ExtClassLoader@d64e7229 ]
[6/1/13 1:44:04:678 EDT] 0000001c annotations W com.ibm.ws.amm.scan.context.ScannerContextImpl getInputDataForClass Class loader [ org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader@e9f56141 ]
[6/1/13 1:44:04:678 EDT] 0000001c annotations W com.ibm.ws.amm.scan.context.ScannerContextImpl getInputDataForClass Class loader [ sun.misc.Launcher$AppClassLoader@964626a4 ]
[6/1/13 1:44:04:678 EDT] 0000001c annotations W com.ibm.ws.amm.scan.context.ScannerContextImpl getInputDataForClass Class loader [ sun.misc.Launcher$ExtClassLoader@ad8046ad ]
[6/1/13 1:44:14:724 EDT] 0000001f ApplicationMg A WSVR0220I: Application stopped: myapp-ear
[6/1/13 1:44:14:896 EDT] 0000001f CompositionUn A WSVR0193I: Composition unit WebSphere:cuname=myapp-ear in BLA WebSphere:blaname=myapp-ear stopped.
[6/1/13 1:44:36:470 EDT] 0000001f annotation W com.ibm.ws.webcontainer.annotation.WASAnnotationHelper collectClasses SRVE8000W: Skipped class that failed to initialize for annotation scanning.
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
at java.lang.Class.forNameImpl(Native Method)
at java.lang.Class.forName(Class.java:213)
at com.ibm.ws.webcontainer.annotation.WASAnnotationHelper.loadClass(WASAnnotationHelper.java:753)
at com.ibm.ws.webcontainer.annotation.WASAnnotationHelper.collectClasses(WASAnnotationHelper.java:188)
at com.ibm.ws.webcontainer.annotation.WASAnnotationHelper.<init>(WASAnnotationHelper.java:143)
at com.ibm.ws.webcontainer.annotation.WASAnnotationHelperManager.getAnnotationHelper(WASAnnotationHelperManager.java:63)
at com.ibm.ws.webcontainer.metadata.WebMetaDataFactory.handOffReferenceData(WebMetaDataFactory.java:450)
at com.ibm.ws.webcontainer.metadata.WebMetaDataFactory.createMetaData(WebMetaDataFactory.java:423)
at com.ibm.ws.runtime.component.MetaDataMgrImpl.createMetaDataFromFactories(MetaDataMgrImpl.java:228)
at com.ibm.ws.runtime.component.MetaDataMgrImpl.createMetaData(MetaDataMgrImpl.java:411)
at com.ibm.ws.runtime.component.DeployedModuleImpl.start(DeployedModuleImpl.java:630)
at com.ibm.ws.runtime.component.DeployedApplicationImpl.start(DeployedApplicationImpl.java:967)
at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.java:766)
at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplicationDynamically(ApplicationMgrImpl.java:1354)
at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:2150)
at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.java:445)
<groupId>com.mytest</groupId>
<artifactId>myapp</artifactId>
<version>2.0.0</version>
<packaging>pom</packaging>
<name>myapp</name>
<properties>
<project.build.source>1.6</project.build.source>
<project.build.target>1.6</project.build.target>
<project.encoding>UTF-8</project.encoding>
<springVersion>3.2.1.RELEASE</springVersion>
</properties>
<modules>
<module>../myapp-domain</module>
<module>../myapp-web</module>
<module>../myapp-ear</module>
</modules>
<dependencyManagement>
<dependencies>
<!-- external dependencies -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${springVersion}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${springVersion}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>opensymphony</groupId>
<artifactId>oscache</artifactId>
<version>2.4</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency>
....... other dependencies .......
<!-- test dependencies -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>${project.build.source}</source>
<target>${project.build.target}</target>
<encoding>${project.encoding}</encoding>
<showDeprecation>true</showDeprecation>
<showWarnings>true</showWarnings>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.4</version>
<configuration>
<encoding>${project.encoding}</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.10</version>
<configuration>
<disableXmlReport>true</disableXmlReport>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>2.0-beta-6</version>
</plugin>
<parent>
<groupId>com.mytest</groupId>
<artifactId>myapp</artifactId>
<version>2.0.0</version>
</parent>
<artifactId>myapp-ear</artifactId>
<packaging>ear</packaging>
<name>MyappEAR</name>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>myapp-web</artifactId>
<type>war</type>
<version>2.0.0</version>
</dependency>
</dependencies>
<build>
<finalName>myapp</finalName>
<resources>
<resource>
<directory>META-INF</directory>
<targetPath>../myapp/META-INF</targetPath>
<includes>
<include>**/*.*</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-ear-plugin</artifactId>
<version>2.7</version>
<configuration>
<applicationXml>${basedir}/META-INF/application.xml</applicationXml>
<generateApplicationXml>false</generateApplicationXml>
<modules>
<webModule>
<groupId>${project.groupId}</groupId>
<artifactId>myapp-web</artifactId>
<bundleFileName>myapp-web.war</bundleFileName>
</webModule>
</modules>
<encoding>${project.encoding}</encoding>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<maven.ear.final.name>myapp.ear</maven.ear.final.name>
</properties>
================================================================================================== Here is the Web project POM ================================================== ================================================这是Web项目POM
<artifactId>myapp-web</artifactId>
<packaging>war</packaging>
<name>myappWeb</name>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${springVersion}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${springVersion}</version>
</dependency>
<build>
<finalName>myapp-web</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<warSourceDirectory>src/main/webapp</warSourceDirectory>
<webXml>src/main/webapp/WEB-INF/web.xml</webXml>
<archive>
<manifest>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
</plugin>
Strange thing is that when I try to Add the ear in Add and remove option of the Websphere 8 by rightclicking onthe server I see that the ear generated has structure like this. 奇怪的是,当我尝试通过右键单击服务器在Websphere 8的添加和删除选项中添加耳朵时,我看到生成的耳朵具有这样的结构。 So it has two wars in the same war.
所以它在同一场战争中有两场战争。 But I looked at the myapp.ear file built and it has only one war in it.
但我查看了构建的myapp.ear文件,其中只有一个战争。
myapp-ear MYAPP耳
|-myapp-web | -myapp的Web
| | |-Spring-web-3.2.1RELEASE.jar
| -Spring-网络3.2.1RELEASE.jar
| | |-myapp-domain jar
| -myapp-domain jar
| |
|-myapp-web.war | -myapp-的web.war
This is a bug in the deployment mechanism of the RAD with maven projects using Spring in versions >= 3.2.0 and is documented in this bugreport: https://jira.springsource.org/browse/SPR-10494 这是RAD的部署机制中的一个错误,在版本> = 3.2.0中使用Spring的maven项目,并在此bug报告中记录: https : //jira.springsource.org/browse/SPR-10494
There are two possible ways of resolving your issue: 有两种方法可以解决您的问题:
The second option is more of a workaround, which is only required for deployments directly from within the IDE. 第二种选择更多的是一种解决方法,只有直接从IDE中进行部署才需要这种方法。 If you export your web project as a .war file and deploy it manually to Websphere it will just work.
如果将Web项目导出为.war文件并将其手动部署到Websphere,它将起作用。
There exists another workaround, that I only read when investigating the problem myself, but didn't try out myself and can't find the link either, so handle with care. 还有另一种解决方法,我只在自己调查问题时阅读,但没有尝试自己,也找不到链接,所以要小心处理。 According to that you can package your actual source into a new project and including that jar in your web project with the required dependencies
根据这一点,您可以将实际源包装到一个新项目中,并在您的Web项目中包含具有所需依赖项的jar
edit: We tried out Spring 4.0.0 and the bug was gone, so this might be the best solution if you are not stuck with a lower Spring version. 编辑:我们试用了Spring 4.0.0并且错误消失了,所以如果你没有坚持使用较低的Spring版本,这可能是最好的解决方案。
As the exception says, it is ClassNotFoundException
. 正如异常所说,它是
ClassNotFoundException
。 This means that necessary spring jars are defined at provided
scope and your deployment is failing to resolve it at runtime. 这意味着必需的弹簧罐在
provided
范围内定义,并且您的部署无法在运行时解析它。
Also: I don't see that you have defined your multi-module dependencies correctly. 另外:我没有看到您正确定义了多模块依赖项。 If
build-project
(which is of type war) defines utility
jar as a dependency at provided
scope, it needs to be bundled with ear. 如果
build-project
(类型为war)将utility
jar定义为provided
范围的依赖项,则需要将其与ear捆绑在一起。
If your utility
jar is not correctly being shared across multiple war files, you could troubleshoot it by adding utility
at compile
scope to build-project
如果您的
utility
jar未在多个war文件中正确共享,则可以通过在compile
范围添加utility
来build-project
来对其进行故障排除
Hope this helps 希望这可以帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.