2012-07-10 49 views
6

我们在那里我们的UI项目使用EJB客户的依赖,包括相当多的一群业务服务的解决方案。 Maven的问题在于,即使客户端.jar通常包含大约1-2个类,它们也会带来整个服务应用程序的完整依赖堆栈。这可以得到一个有点难看,当的.ear文件开始成长到50-100Mb弹出有不时感谢讨厌的错误无关的依赖偷偷自己的方式进入用户界面应用程序。Maven的EJB客户端生成依赖排除

当然,我们总是可以排除在客户端的依赖关系,但后来我们都写同样的一堆使用这些服务线,以每个客户的项目,这是一个很多不必要的重复。另外,人们会提出最奇怪的错误消息,并使用大量的时间来追踪它们,然后记住提及它们包含了一些客户端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开始变得相当长。

我将标志着作为依赖提供,但也有不崩溃上运行时,如果它们不存在一对夫妇的依赖。说包含另一个服务调用的另一个应用程序与另一个外部的Exception类,这不是由于某种原因或另一个包装在服务项目中的原因,如果不存在,将在运行时导致ClassNotFoundException。

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

回答

1

似乎Maven,那么不支持构建多个罐子出一个模块的非常好。

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

0

我在这里有同样的问题。我认为一个解决方案可以使用配置文件,因为每个配置文件,你可以指定依赖关系(见http://blog.sonatype.com/people/2010/01/how-to-create-two-jars-from-one-project-and-why-you-shouldnt/

在我而言,这是行不通的,因为我需要同时生成JAR文件(EJB和EJB-客户端)一次执行Maven。 :)

+0

面对类似的问题,开始改变项目是如何通过CI解决方案内置很可能将是一个大麻烦,成为维修的问题,当他们从公司中所有其他应用程序具有不同的功能。 – t0mppa 2013-05-24 07:09:16