我正在使用NetBeans和Maven開發小型Web應用程序。部署戰爭後Glassfish上的NoClassDefFoundError
項目包括三個模塊:
prychadmin(這是主模塊)
旅行
接口
它具有被劃分等,由於後兩種模塊也用於其他地方。我將所有東西都打包成war文件(包含在WEB-INF/lib中的模塊旅行和接口)並嘗試部署到glassfish(嘗試通過netbeans進行部署並手動部署),並且我在旅行模塊中的其中一個類中獲得了NoClassDefFoundError。
RuntimeException
java.lang.NoClassDefFoundError: chore/gry/prych/map/LocationImpl
我正在尋找幾天的解決方案,一個消息來源告訴我修改MANIFEST.MF所以現在看起來是這樣的:
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: user
Build-Jdk: 1.6.0_26
Class-Path: travel-1.0-SNAPSHOT.jar log4j-1.2.16.jar interfaces-1.0-SN
APSHOT.jar
,但它並沒有幫助。
我也試過將它部署到tomcat,但它沒有工作,所以它一定是我在戰爭文件中的愚蠢的錯誤。
有沒有人有任何想法?
這裏是我的prychadimn項目的pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>prych</artifactId>
<groupId>chore.gry</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>chore.gry.prych</groupId>
<artifactId>prychadmin</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>prychadmin Java EE 6 Webapp</name>
<url>http://maven.apache.org</url>
<repositories>
<repository>
<id>java.net2</id>
<name>Repository hosting the jee6 artifacts</name>
<url>http://download.java.net/maven/2</url>
</repository>
<repository>
<id>apache</id>
<name>Apache</name>
<url>http://ftp.cica.es/mirrors/maven2/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>chore.gry.prych</groupId>
<artifactId>travel</artifactId>
<version>1.0-SNAPSHOT</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1-alpha-2</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
<archive>
<manifest>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>compile</phase>
<configuration>
<tasks>
<copy todir="src\main\webapp\chore\gry\prych\prychadmin\mapa">
<fileset dir="target\classes\chore\gry\prych\prychadmin\mapa"/>
</copy>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<finalName>prychadmin</finalName>
</build>
<profiles>
<profile>
<id>endorsed</id>
<activation>
<property>
<name>sun.boot.class.path</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<!-- javaee6 contains upgrades of APIs contained within the JDK itself.
As such these need to be placed on the bootclasspath, rather than classpath of the
compiler.
If you don't make use of these new updated API, you can delete the profile.
On non-SUN jdk, you will need to create a similar profile for your jdk, with the similar property as sun.boot.class.path in Sun's JDK.-->
<compilerArguments>
<bootclasspath>${settings.localRepository}/javax/javaee-endorsed-api/6.0/javaee-endorsed-api-6.0.jar${path.separator}${sun.boot.class.path}</bootclasspath>
</compilerArguments>
</configuration>
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-endorsed-api</artifactId>
<version>6.0</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
我的環境:
Windows 7的
的Glassfish 3.1.2.2
的Netbeans 7.2
JDK 1.6.0_26
的Maven 3.0.3
EDIT1 這裏是我的包樹:
- index.jsp
-
+---chore
- L---gry
- L---prych
- L---prychadmin
- L---mapa
- DBConnector.class
- Location.class
- ....
- PathsEditorPanel.class
-
+---css
- prych.css
-
+---lib
- travel-1.0-SNAPSHOT.jar
-
+---META-INF
- - context.xml
- - MANIFEST.MF
- -
- +---maven
- - L---chore.gry.prych
- - L---prychadmin
- - pom.properties
- - pom.xml
- -
- L---services
- java.sql.Driver
-
+---org
- L---postgresql
- - Driver$1.class
- - Driver$ConnectThread.class
- - ...
- RecoveredXid.class
-
L---WEB-INF
+---classes
- L---chore
- L---gry
- L---prych
- L---prychadmin
- - Starter.class
- -
- L---mapa
- DBConnector.class
- LocationAdmin.class
- ...
- PathsEditorPanel.class
-
L---lib
interfaces-1.0-SNAPSHOT.jar
log4j-1.2.16.jar
travel-1.0-SNAPSHOT.jar <-- this is the one that has LocationImpl.class
還有一個奇怪這個我有通知,還不如對問題沒有影響。在文件夾雜項主要方向不僅來自我的主要模塊的類,但也從兩個庫中的第二個庫的兩個類(實際接口)。
請提供錯誤的詳細信息。你說的這三個模塊都是不同的應用程序或包? –
我添加了確切的錯誤消息,我得到描述。這三個模塊是不同的包,只有prychadmin是應用程序,另外兩個是帶有類的簡單的jar。 – Edheene