Проблемы с развертыванием файла уха - PullRequest
1 голос
/ 06 января 2012

Я пытаюсь развернуть файл EAR на сервере приложений. Проект строится с использованием Maven 3 в NetBeans 7.

Когда я пытаюсь развернуть Glassfish и Websphere CE, скажите, что некоторые классы не могут быть найдены, даже если они упакованы в файл EAR. Серверы приложений могут видеть другие классы в пакете, но не все из них.

В чем может быть проблема? Я пытался решить это весь день. Я просмотрел файлы Maven POM и читал о дескрипторах развертывания, но, похоже, не в процессе.

Я получаю ошибку SEVERE: класс [className] не найден. Ошибка при загрузке [className]

Вот основной файл pom для проекта:

<modelVersion>4.0.0</modelVersion>
<parent>
    <artifactId>SeaMarNetting</artifactId>
    <groupId>com.manageinc.seamar</groupId>
    <version>1.0RC1</version>
</parent>
<groupId>${project.parent.groupId}</groupId>
<artifactId>SeaMarNetting-ear</artifactId>
<packaging>ear</packaging>
<version>${project.parent.version}</version>
<name>SeaMarNetting-ear JEE5 Assembly</name>
<url>http://maven.apache.org</url>
<dependencies>
    <dependency>
        <groupId>${project.parent.groupId}</groupId>
        <artifactId>SeaMarNetting-project-deps</artifactId>
        <version>${project.parent.version}</version>
        <type>pom</type>
    </dependency>
    <dependency>
        <groupId>${project.parent.groupId}</groupId>
        <artifactId>SeaMarNetting-ejb</artifactId>
        <version>${project.parent.version}</version>
        <type>ejb</type>
    </dependency>
    <dependency>
        <groupId>${project.parent.groupId}</groupId>
        <artifactId>SeaMarNetting-jpa</artifactId>
        <version>${project.parent.version}</version>            
    </dependency>
    <dependency>
        <groupId>${project.parent.groupId}</groupId>
        <artifactId>SeaMarNetting-web</artifactId>
        <version>${project.parent.version}</version>
        <type>war</type>
    </dependency>
    <dependency>
        <groupId>com.manageinc.seamar</groupId>
        <artifactId>SeaMarNetting-web</artifactId>
        <version>1.0RC1</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.0.2</version>
            <configuration>
                <source>${source.version}</source>
                <target>${compile.version}</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ear-plugin</artifactId>
            <version>2.4.2</version>
            <configuration>
                <version>5</version>
                <displayName>SeaMarNetting</displayName>
                <modules>                        
                    <jarModule>
                        <groupId>${project.parent.groupId}</groupId>
                        <artifactId>SeaMarNetting-jpa</artifactId>
                    </jarModule>
                    <ejbModule>
                        <groupId>${project.parent.groupId}</groupId>
                        <artifactId>SeaMarNetting-ejb</artifactId>
                    </ejbModule>
                    <webModule>
                        <groupId>${project.parent.groupId}</groupId>
                        <artifactId>SeaMarNetting-web</artifactId>
                        <contextRoot>/nets</contextRoot>
                    </webModule>
                </modules>
            </configuration>
        </plugin>
    </plugins>
</build>

Я попытался изменить область, как рекомендовано, но получаю те же сообщения об ошибках. Я только начал использовать Maven, и я уверен, что это нечто простое, о чем я не знаю.

Спасибо.

1 Ответ

0 голосов
/ 07 января 2012

Не имея возможности взглянуть на ваш файл POM, я думаю, вы неправильно определяете свои зависимости. Ссылка POM Apache по адресу: http://maven.apache.org/pom.html#The_Basics показывает:

<dependencies>
<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.0</version>
  <type>jar</type>
  <scope>test</scope>
  <optional>true</optional>
</dependency>
...

Я думаю, вам нужно сосредоточиться на атрибуте «видимость», где вы можете указать его как «предоставленный» или «системный». Таким образом, Maven не будет искать ваши банки в своем хранилище. Вот возможности с описаниями:

объем: Этот элемент относится к пути к классу рассматриваемой задачи (компиляция и время выполнения, тестирование,> и т. Д.), А также к тому, как ограничить транзитивность зависимости. Доступны пять областей действия: компиляция, при условии, время выполнения, тестирование, система.

compile - это область по умолчанию, используемая, если она не указана. Зависимости компиляции> доступны во всех classpath. Кроме того, эти зависимости распространяются на зависимые> проекты.

при условии - это очень похоже на компиляцию, но указывает, что вы ожидаете, что JDK или контейнер предоставят его во время выполнения. Он доступен только в пути к классам компиляции и тестирования и не> транзитивен.

время выполнения - эта область указывает, что зависимость не требуется для компиляции, но> для выполнения. Он находится во время выполнения и пути к классам теста, но не в пути к классам компиляции.

test - эта область указывает, что зависимость не требуется для нормального использования> приложения и доступна только для фаз компиляции и выполнения теста.

system - эта область похожа на предоставленную, за исключением того, что вы должны предоставить JAR, который> содержит ее явно. Артефакт всегда доступен и не просматривается в> хранилище.

Также важно помнить, что для каждой зависимости нужно указать groupId, соответствующий groupId репозитория. Я обнаружил, что даже если мои файлы сохраняются локально, им все равно нужен идентификатор группы, даже если область «предоставлена».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...