7

我们有一个解决方案,我们的 UI 项目通过使用 EJB 客户端依赖项包含大量业务服务。Maven 上的问题在于,即使客户端 .jar 通常包含大约 1-2 个类,它们也会带来整个服务应用程序的完整依赖堆栈。这可能有点难看,当 .ear 文件开始增长到 50-100Mb时,由于不相关的依赖项潜入 UI 应用程序不时会出现令人讨厌的错误。

当然,我们总是可以排除客户端上的依赖关系,但是我们必须为使用这些服务的每个客户端项目编写相同的一行代码,这是很多不必要的重复。另外,人们提出了最奇怪的错误消息并花费大量时间跟踪它们,然后才记得提到它们包含一些客户端 jar 并且没有检查它带来了哪些额外的依赖项。

例子:

        <dependency>
            <groupId>fi.path.to.service</groupId>
            <artifactId>customermanagement-common</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>fi.path.to.service</groupId>
            <artifactId>customermanagement-service</artifactId>
            <classifier>client</classifier>
            <exclusions>
                <exclusion>
                    <groupId>fi.path.to.dependency</groupId>
                    <artifactId>internal-dependency-#1</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.codehaus.castor</groupId>
                    <artifactId>castor</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>fi.path.to.dependency</groupId>
                    <artifactId>internal-dependency-#2</artifactId>
                </exclusion>
                <exclusion>
                    <artifactId>internal-dependency-#3</artifactId>
                    <groupId>fi.path.to.dependency</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>internal-dependency-#4</artifactId>
                    <groupId>fi.path.to.dependency</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>internal-dependency-#5</artifactId>
                    <groupId>fi.path.to.dependency</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>castor-xml</artifactId>
                    <groupId>org.codehaus.castor</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>castor-codegen</artifactId>
                    <groupId>org.codehaus.castor</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>castor-xml-schema</artifactId>
                    <groupId>org.codehaus.castor</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>internal-dependency-#6</artifactId>
                    <groupId>fi.path.to.dependency</groupId>
                </exclusion>
            </exclusions>
            <version>2.6</version>
        </dependency>

这只是包含一个服务客户端,想象一下在几个不同的应用程序中有几个这样的应用程序,你就会明白,每次都写下所有的排除项是很烦人的,项目 POM 开始变得相当冗长。

我会将依赖项标记为已提供,但是如果它们不存在,则有几个依赖项会在运行时崩溃。比如说那些包含对另一个应用程序的另一个服务调用的外部异常类,这不是出于某种原因或其他原因包装在服务项目中,如果不存在,则会在运行时导致 ClassNotFoundException。

因此,我知道可以通过使用 maven-ejb-plugin 上的 pom.xml 规范在 ejb 客户端生成过程中排除/包含类,但是有什么方法可以排除依赖项吗?

4

2 回答 2

1

似乎 Maven 只是不支持从一个模块中构建多个 jar 非常好。

因此,我们发现的唯一合理的解决方法是创建另一个模块(将 xxx-service 分解为 xxx-service 和 xxx-service-client)并将 xxx-service-client 模块配置为只有 EJB 客户端/委托类和最小依赖项。这样,可以通过一次执行来构建项目。

于 2013-05-24T07:29:07.557 回答
0

我在这里有同样的问题。我认为一种解决方案可能是使用配置文件,因为在每个配置文件中您都可以指定依赖项(请参阅http://blog.sonatype.com/people/2010/01/how-to-create-two-jars-from-one-项目和为什么你应该/

就我而言,这不起作用,因为我需要在一次执行 Maven 时生成两个 JAR(ejb 和 ejb-client)。:)

于 2013-05-02T23:11:10.543 回答