【问题标题】:How to instruct maven-ejb-plugin to only include required classes in client EJB package?如何指示 maven-ejb-plugin 仅在客户端 EJB 包中包含所需的类?
【发布时间】:2016-09-07 01:42:43
【问题描述】:

我有一个相当大的遗留模块,其中包含 EJB 3.0 和一些业务逻辑类。我正在尝试将构建过程转换为使用 maven,但在配置 maven-ejb-plugin 时遇到了困难。

我正在尝试使用 maven-ejb-plugin 生成客户端 EJB 包,但请注意客户端包也包含所有业务逻辑类 - 即使 EJB 没有引用它们。

我目前的配置是: org.apache.maven.plugins maven-ejb-插件 默认-ejb ${project.build.outputDirectory} ejb 3.0 真的

不幸的是,业务类/模型/DTO 的包没有非常明确的分离,因此很难准确地确定哪些 EJB 依赖于哪些类。

maven-ejb-plugin 中是否有一种机制来指示 maven 在客户端包中仅包含所需的 EJB 接口/实现和依赖类并忽略/跳过其他所有内容?还是我必须手动确定各个接口需要哪些依赖类并将插件配置为仅包含这些文件?

【问题讨论】:

    标签: java maven jakarta-ee ejb


    【解决方案1】:

    据我了解,您有一些包,例如远程或本地 EJB 的接口,并且您在接口的同一包中有定义(无状态、有状态、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>
    

    【讨论】:

    • 我完全同意你的观点。但目前,即使我在技术上打破了 maven 约定,我也试图避免将这个大型模块作为第一步进行重构。因此,我同时试图找到一种解决方法,一旦我确信我的 maven 构建工作正常并生成正确类型的工件,我就可以适当地重构项目。话虽这么说,如果我只将我的包含指定为我的接口,它似乎不包含依赖类(因为它们没有在我的包含过滤器中指定)
    【解决方案2】:

    最近我开始将 EJB 项目迁移到 Maven 项目。 我们在我们的项目中使用EJB 2.0,我不知道是从什么开始迁移过程,目前现有的EJB项目包括STUBS & TIES(我们通过RAD工具生成jar文件。)。不知道如何让这个 Maven 将这个 STUBS & TIES 包含在我通过 Maven 进程生成的 jar 中。

    我在 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      • 2013-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多