Как настроить maven-ejb-plugin на включение только необходимых классов в клиентский пакет EJB?
У меня довольно большой устаревший модуль, который содержит как EJB 3.0, так и некоторые классы бизнес-логики. Я пытаюсь преобразовать процесс сборки в Maven, и у меня возникают трудности с настройкой maven-ejb-plugin
,
Я пытаюсь сгенерировать клиентский EJB-пакет, используя maven-ejb-plugin, но обратите внимание, что клиентский пакет также содержит все классы бизнес-логики - даже если на них не ссылаются EJB.
Моя текущая конфигурация: org.apache.maven.plugins maven-ejb-plugin default-ejb ${project.build.outputDirectory} ejb 3.0 true
К сожалению, не существует четкого разделения пакетов для бизнес-классов / моделей /DTO, поэтому нелегко точно определить, какие EJB-компоненты зависят от каких классов.
Есть ли механизм в maven-ejb-plugin
поручить maven включить в клиентский пакет только требуемые интерфейсы / реализации EJB и зависимые классы и игнорировать / пропустить все остальное? Или мне нужно вручную выяснить, какие именно классы зависят от отдельных интерфейсов, и настроить плагин для включения только этих файлов?
1 ответ
Как я понимаю, у вас есть несколько пакетов, включая, например, интерфейсы вашего удаленного или локального EJB, и у вас есть определение (stateless fullfull, mdb и т. Д.) В том же пакете ваших интерфейсов, и вы хотите импортировать только классы (или интерфейсы), что нужно вашему клиенту, он не нуждается в реализации по логическим причинам.
Итак, у нас есть два момента: в качестве рекомендации вы должны иметь как минимум свои удаленные или локальные интерфейсы в отдельном проекте, чтобы отделить это (как проект Maven), и каждый, кто хочет их использовать, просто должен импортировать его как зависимость, без необходимости знать об их реализации.
С другой стороны, если вы следовали некоторым соглашениям об именах, возможно, вы могли бы выполнить то, что вы хотите, включив (или исключив) класс.java с некоторой скороговоркой.
Вы можете проверить ссылку выше:
http://maven.apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html
Если вы используете некоторые соглашения, подобные этим: http://www.oracle.com/technetwork/java/namingconventions-139351.html
Вы сможете, например:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<excludes>
<include>**/Local*.java</include>
</excludes>
</configuration>
</plugin>
</plugins>
Недавно я начал работать над переносом проекта EJB в Maven Project. Мы используем EJB 2.0 в нашем проекте, я не знаю, как начать процесс миграции, в настоящее время существующий проект EJB включает STUBS & TIES(с помощью инструмента RAD мы генерируем файл jar.). Не уверен, как я могу заставить этот Maven включать эти STUBS & TIES в банку, которую я генерирую с помощью процесса Maven.
Я использую эту конфигурацию ниже в POM.xml
<profile>
<id>xdoclet</id>
<activation>
<property>
<name>xdoclet</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>xdoclet-maven-plugin</artifactId>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>xdoclet</goal>
</goals>
<configuration>
<tasks>
<ejbdoclet
destDir="${project.build.sourceDirectory}"
force="true" ejbSpec="2.0"
verbose="true">
<fileset
dir="${project.build.sourceDirectory}">
<include name="**/*Bean.java" />
</fileset>
<packageSubstitution
packages="service" useFirst="true"
substituteWith="interface" />
<homeinterface />
<remoteinterface />
<deploymentdescriptor
displayname="Service Name"
description=""
destDir="${basedir}/src/main/resources/META-INF"
validateXML="true" useIds="true" />
<websphere
destDir="${basedir}/src/main/resources/META-INF"
validateXML="true" />
</ejbdoclet>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>was-ejb</id>
<activation>
<property>
<name>was-ejb</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>was6-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>ejbdeploy</goal>
</goals>
</execution>
</executions>
<configuration>
<wasHome>C:/Program Files/IBM/WebSphere/AppServer</wasHome>
</configuration>
</plugin>
</plugins>
</build>
</profile>