Java Maven ejb客户端生成依赖项排除

Java Maven ejb客户端生成依赖项排除,java,maven,dependencies,client,ejb,Java,Maven,Dependencies,Client,Ejb,我们有一个解决方案,其中我们的UI项目通过使用EJB客户机依赖项包含大量业务服务。Maven上的问题是,尽管client.jar通常包含1-2个类,但它们带来了整个服务应用程序的完整依赖堆栈。当.ear文件开始以50-100Mb的速度增长,并且由于不相关的依赖项潜入UI应用程序,有时会出现令人讨厌的错误时,这可能会变得有点难看 当然,我们总是可以排除对客户端的依赖,但是我们必须使用这些服务为每个客户端项目编写相同的行,这是很多不必要的重复。此外,人们会产生最奇怪的错误消息,并花费大量时间跟踪它们

我们有一个解决方案,其中我们的UI项目通过使用EJB客户机依赖项包含大量业务服务。Maven上的问题是,尽管client.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>

fi.path.to.service
客户管理通用
2.6
fi.path.to.service
客户管理服务
客户
fi.path.to.dependency
内部依赖——1
org.codehaus.castor
脚轮
fi.path.to.dependency
内部依赖性#2
内部依赖性#3
fi.path.to.dependency
内部依赖性#4
fi.path.to.dependency
内部依赖性#5
fi.path.to.dependency
castor xml
org.codehaus.castor
蓖麻编码基因
org.codehaus.castor
castor xml模式
org.codehaus.castor
内部依赖性#6
fi.path.to.dependency
2.6
这只是一个服务客户机被包括在内,想象一下在几个不同的应用程序中有几个这样的客户机,你就明白了,每次写下所有的排除项都很烦人,项目POM开始变得相当冗长

我会将依赖项标记为提供的依赖项,但有两个依赖项确实会在运行时崩溃,如果它们不存在的话。例如,包含对另一个应用程序的另一个服务调用,该应用程序具有外部异常类,该异常类不是出于某种原因包装在服务项目中,如果不存在,将在运行时导致ClassNotFoundException


因此,我知道通过在maven ejb插件上使用pom.xml规范,可以在ejb客户机的生成过程中排除/包含类,但是有没有办法排除依赖项呢?

我在这里也有同样的问题。我认为一个解决方案可以是使用配置文件,因为在每个配置文件中可以指定依赖项(请参阅)


在我的例子中,这不起作用,因为我需要在Maven的一次执行中生成两个jar(ejb和ejb客户机)

似乎Maven不太支持用一个模块构建多个JAR


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

面对类似的问题,开始改变通过CI解决方案构建项目的方式可能会成为一个大麻烦,并且会成为维护问题,因为它们的功能与公司中的所有其他应用程序不同。