2012-07-10 4 views
6

우리는 우리의 UI 프로젝트가 EJB 클라이언트 의존성을 사용하여 꽤 많은 비즈니스 서비스를 포함하는 솔루션을 가지고 있습니다. Maven에서이 문제는 클라이언트 .jar에 보통 약 1-2 개의 클래스가 포함되어 있어도 전체 서비스 응용 프로그램의 전체 종속성 스택을 가져 오는 문제가 있습니다. .ear 파일이 50-100Mb까지 커지기 시작하면 팝업이 발생하여 UI 응용 프로그램에 몰래 들어가는 부적절한 종속성으로 인해 때때로 성가신 오류가 발생할 수 있습니다.Maven ejb-client 생성 의존성 배제

물론 우리는 항상 클라이언트 측의 의존성을 제외 할 수 있습니다.하지만 우리는 이러한 서비스를 사용하여 각 클라이언트 프로젝트에 동일한 묶음의 줄을 작성해야합니다. 이것은 많은 불필요한 반복입니다. 게다가, 사람들은 가장 이상한 오류 메시지를 생각해 내고 일부 클라이언트 항아리가 포함되어 있다는 것을 기억하기 전에 그들을 추적하는 데 많은 시간을 사용합니다. 그리고 그것이 방정식으로 가져온 추가 의존성을 확인하지 않았습니다.

예 : 하나의 서비스 클라이언트가 포함되고

 <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은 하나의 모듈에서 여러 개의 jar 파일을 잘 만드는 것을 지원하지 않는다고합니다.

따라서 우리가 발견 한이 합리적인 방법은 다른 모듈 (xxx-service 및 xxx-service-client로 xxx-service를 분리)을 작성하고 xxx-service-client 모듈을 구성하여 EJB 클라이언트/위임자 클래스 & 최소한의 종속성. 그렇게하면 프로젝트를 단일 실행으로 빌드 할 수 있습니다.

0

여기에도 같은 문제가 있습니다. 나는 각 당신이 종속성을 지정할 수 프로필 하나의 솔루션은 내가 모두 JAR 파일 (EJB 및 ejb-를 생성해야하기 때문에,이 작동하지 않습니다 내 경우

을 (http://blog.sonatype.com/people/2010/01/how-to-create-two-jars-from-one-project-and-why-you-shouldnt/ 참조) 프로파일을 사용 할 수 있다고 생각 클라이언트)를 Maven을 한 번 실행하면됩니다. :)

+0

비슷한 문제에 직면하여 CI 솔루션을 통해 프로젝트를 구축하는 방법을 변경하기 시작하면 회사의 다른 모든 앱과 다르게 기능 할 때 유지 관리 문제가 될 수 있습니다. – t0mppa