NoClassDefFoundError на Glassfish после развертывания войны

Я разрабатываю небольшое веб-приложение с использованием netbeans и maven.

Проект состоит из трех модулей:

прычадмин (это основной модуль)

путешествовать

интерфейсы

Его нужно так разделить, потому что два последних модуля также используются где-то еще. Я упаковываю все в военный файл (модули путешествия и интерфейсы, включенные в 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, но это тоже не сработало, так что это, должно быть, моя глупая ошибка в файле войны.

У кого-нибудь есть идеи?

вот мой прычадимн проект 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

Стеклянная рыба 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

Есть еще одна странная вещь, которую я замечаю, она также может не повлиять на проблему. В папке chore в основном направлении находятся не только классы из моего основного модуля, но также два класса (фактически интерфейсы) из второй из двух библиотек.


person Edheene    schedule 24.10.2012    source источник
comment
предоставьте подробные сведения об ошибке. Вы сказали, что эти три модуля - это разные приложения ИЛИ пакеты?   -  person Gunjan Shah    schedule 24.10.2012
comment
Я добавил точное сообщение об ошибке в описание. Эти три модуля - разные пакеты, только prychadmin - это приложение, а два других - это простые jar-файлы с классами.   -  person Edheene    schedule 24.10.2012


Ответы (2)


Попробуйте добавить зависимые от вашего приложения файлы jar в каталог двух доменов ext (domain1 / lib / ext).

person Gunjan Shah    schedule 25.10.2012
comment
Попробовал, не вышло, может что-то перезапустить? Я посмотрел на инструмент веб-администрирования Glassfish, но он ничего не показывает в разделе Библиотеки для этого приложения. - person Edheene; 25.10.2012
comment
попробуйте удалить GlassFish. Удалите все содержимое из доменного ›развертывания и› сгенерированного домена и ›домена› eclipse приложений и каталога кэша домена ›osgi. - person Gunjan Shah; 26.10.2012

Вам не нужно изменять файл манифеста. Из сообщения об ошибке кажется, что отсутствующий класс - это класс из вашего основного модуля. Можете ли вы убедиться, что класс существует в WEB-INF / classes?

person Wins    schedule 25.10.2012
comment
Этот класс находится в пакете .jar в каталоге lib, я это проверил трижды. Ну, я мог бы скопировать файл .class в папку классов, но я не вижу смысла, я хочу выяснить, почему он не работает спроектированным образом, с .jar в lib, а не использовать сомнительные обходные пути. Конечно, если ничего не получится, я воспользуюсь этим обходным путем, но мне бы очень хотелось, чтобы все было правильно. - person Edheene; 25.10.2012
comment
Если вы говорите, что это не работает на tomcat, очевидно, что структура неправильная. Можете ли вы разложить структуру каталогов в файле war? В частности, что касается класса, который не встречается - person Wins; 25.10.2012
comment
Я добавил это в описание проблемы - person Edheene; 25.10.2012
comment
Ваша военная структура не кажется правильной. Почему бы вам не попытаться сначала очистить их вручную, а затем использовать tomcat? Это выглядит так грязно. - person Wins; 26.10.2012
comment
Что именно кажется неправильным, что, по вашему мнению, следует удалить? Эта война создается с помощью maven-war-plugin, как вы можете видеть в pom.xml выше. - person Edheene; 26.10.2012
comment
Все классы должны находиться в каталоге WEB-INF / classes, а все файлы jar должны находиться в каталоге WEB-INF / lib. - person Wins; 26.10.2012