Как заставить Maven EAR Plugin автоматически управлять путем к классам для зависимостей? - PullRequest
3 голосов
/ 16 августа 2011

Я начал использовать плагин maven ear около 12 месяцев назад и хочу выяснить, есть ли какие-либо альтернативы. Одним из преимуществ Maven является управление зависимостями, однако вы, похоже, почти полностью потеряли это с помощью плагина для ушей. Он встраивает все зависимые банки в ухо, но на самом деле не помещает ни одного из них в путь к классам без добавления следующей конфигурации:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-ear-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <version>6</version>
        <modules>
            <ejbModule>
                <groupId>com.mycompany.app</groupId>
                <artifactId>MyApplication-ejb</artifactId>                          
            </ejbModule>

            <jarModule>
                <groupId>axis</groupId>
                <artifactId>axis</artifactId>
                <bundleDir>lib</bundleDir>
            </jarModule>
            <jarModule>
                <groupId>commons-discovery</groupId>
                <artifactId>commons-discovery</artifactId>
                <bundleDir>lib</bundleDir>
            </jarModule>
            <jarModule>
                <groupId>axis</groupId>
                <artifactId>axis-wsdl4j</artifactId>
                <bundleDir>lib</bundleDir>
            </jarModule>
        </modules>
    </configuration>
</plugin>

Я что-то упустил, более поздняя версия плагина устраняет необходимость в этом, есть ли альтернатива, которая управляет этим для вас? Я не могу поверить, что каждый раз, когда я добавляю зависимость к модулю, мне нужно добавить ее в конфигурацию наушников. Самое расстраивающее, что даже если я не забуду добавить зависимую библиотеку в вышеупомянутую конфигурацию, если она, в свою очередь, зависит от чего-то другого (как было с осью), я узнаю только тогда, когда разверну ухо.

Ответы [ 2 ]

5 голосов
/ 16 августа 2011

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

root
  +-- client
  !     +--- pom.xml
  +-- service
  !     +--- pom.xml
  +-- ear
        +--- pom.xml

Во-вторых, вы должны обновить версию плагина для уха, потому что текущая версия2.6.Более того, определите ваши части как зависимости

 <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-ear-plugin</artifactId>
        <version>2.5</version>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>webgui</artifactId>
      <version>${project.version}</version>
      <type>war</type>
    </dependency>
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>service</artifactId>
      <version>${project.version}</version>
      <type>ejb</type>
    </dependency>
  </dependencies>

Конфигурация, которую вы используете, предназначена для дополнительных сторонних библиотек, которые должны быть упакованы.

3 голосов
/ 02 мая 2014

В дополнение к ответу khmarbaise я хочу отметить, что для того, чтобы ваш модуль EJB мог иметь доступ к библиотекам, вы должны настроить его так, чтобы он включал зависимости внутри META-INF/MANIFEST.MF следующим образом:

<plugin>
    <artifactId>maven-ejb-plugin</artifactId>
    ...
    <configuration>
        ...
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
            </manifest>
        </archive>
    </configuration>
    ...
</plugin>
...