Проект Maven EJB - пакет с зависимостями - PullRequest
1 голос
/ 21 сентября 2011

Есть ли способ упаковать зависимости проекта maven ejb в финальный jar?

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

Прямо сейчас у меня есть:

<artifactId>projectname</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>ejb</packaging>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ejb-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <ejbVersion>3.1</ejbVersion>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>

                        <!-- without this, the datetime stamp unique id's will be appended to classpath items -->
                        <!-- see: http://maven.apache.org/shared/maven-archiver/examples/classpath.html#Snapshot -->
                        <useUniqueVersions>false</useUniqueVersions>
                    </manifest>
                </archive>
            </configuration>
        </plugin>

Нужно ли устанавливать тип упаковки на ухо? Могу ли я включить транзитивные зависимости в автономный ejb jar? Если я установлю его на ear, как мне сконфигурировать плагин ear?

Заранее спасибо!

Ответы [ 2 ]

4 голосов
/ 21 сентября 2011

Плагин Maven Shade может упаковать зависимости в JAR. Он извлечет классы / ресурсы из всех зависимостей проекта при их упаковке с окончательным JAR.

Этого должно быть достаточно для упаковки всех ваших зависимостей:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>1.4</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Однако у этого есть недостатки.

  • Несколько ресурсов с одинаковым именем в разных JAR-файлах могут вызывать проблемы (например, / META-INF / services / ...). Вы можете использовать преобразователи ресурсов Shade, но это может стать грязным.
  • Не так просто отследить, какие JAR-файлы являются зависимостями в вашем проекте после развертывания (вам нужно будет вернуться к POM, а не просто смотреть на EAR).

Если у вас нет веских причин не делать этого, я бы порекомендовал вам создать EAR.

0 голосов
/ 26 сентября 2011

Я не думаю, что есть прямой способ сделать это. Вместо этого можно сделать, это создать его как модульный проект с модулем ear и ejb. Это не совсем то, что я хотел, но это работает и лучше, чем отдельные проекты.

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