2013-10-24 6 views
1

/lib 폴더에 있습니다. 분명히 projectA.jar 파일은/lib 폴더 안에 있습니다. 이 두 프로젝트가 lib 외부에 있어야한다는 내 application.xml이 있습니다.받는다는 - 복사하지 않고 프로젝트 외부 항아리/lib에있는 동안 EAR 포장 내 pom.xml 파일이 외부 projectA.jar 파일과 projectB.war을 포함해야 EAR 파일을 패키징되어</p> <p>귀 포장하면서 이런 일이

질문 : 어떻게해야 maven에게/lib 폴더 안에 projectA.jar을 번들하지 말고/lib 폴더 외부에 번들을 넣으라고 명령합니까?

내 EAR 구조가 있어야한다 :

MyWebEAR

\lib 
\META-INF 
projectA.jar 
ProjectB.war 

아래는 내 치어입니다.

<dependencies> 
    <dependency> 
     <groupId>com.xxx.sms</groupId> 
     <artifactId>projectA</artifactId> 
     <version>1.0-SNAPSHOT</version>    
    </dependency> 
    <dependency> 
     <groupId>com.xxx</groupId> 
     <artifactId>projectB</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     <type>war</type> 
    </dependency> 
</dependencies> 

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-ear-plugin</artifactId> 
      <configuration> 
       <defaultLibBundleDir>lib</defaultLibBundleDir> 
       <earSourceDirectory>${basedir}</earSourceDirectory> 
       <earSourceIncludes>META-INF/*</earSourceIncludes> 
       <archive> 
        <manifest> 
         <addClasspath>true</addClasspath> 
        </manifest> 
       </archive> 
       <generateApplicationXml>false</generateApplicationXml> 
       <applicationXML>${basedir}/META-INF/application.xml</applicationXML> 
      </configuration> 
     </plugin> 
    </plugins> 
    <finalName>MyWebEAR</finalName> 
</build> 

감사합니다.

답변

4

maven-ear-plugin configurationmodules 섹션에 projectA 종속성에 대해 특별히 jarModule 구성을 정의하고 jar을 배치 할 위치를 명시 적으로 설정해야합니다.

그래서 당신의 POM은 다음과 같습니다

<plugin> 
    <artifactId>maven-ear-plugin</artifactId> 
    <configuration> 
     <defaultLibBundleDir>lib</defaultLibBundleDir> 
     <earSourceDirectory>${basedir}</earSourceDirectory> 
     <earSourceIncludes>META-INF/*</earSourceIncludes> 
     <archive> 
      <manifest> 
       <addClasspath>true</addClasspath> 
      </manifest> 
     </archive> 
     <generateApplicationXml>false</generateApplicationXml> 
     <applicationXML>${basedir}/META-INF/application.xml</applicationXML> 
     <modules> 
      <jarModule> 
       <groupId>com.xxx.sms</groupId> 
       <artifactId>projectA</artifactId> 
       <bundleDir>/</bundleDir> 
      </jarModule> 
     </modules> 
    </configuration> 
</plugin> 

bundleDir의 값 (/)는 LIB의 기본 위치 대신 귀의 루트 폴더에 PROJECTA의 단지를 배치 할 받는다는-귀 플러그인을 알려줍니다 .

현재 플러그인 설명서에 이에 대한 세부 정보를 볼 수 있습니다 : http://maven.apache.org/plugins/maven-ear-plugin/examples/customizing-module-location.html

+0

감사합니다. 건배. –

+0

당신을 진심으로 환영합니다. 다행히 문제가 해결되었습니다. – DB5

+0

예. 해결 됐어. –

0

나는 내 프로젝트에서 같은 문제가 있었다.

In my case, I was using an MDB so it was needed to be declared as <**ejbModule**> instead of jarModule. I also had to declare my dependency as of type ejb to be picked up Jboss (6.4): 

<dependency> 
    <groupId>ab.cd</groupId> 
    <artifactId>mdb-publisher</artifactId> 
    <version>xxx-SNAPSHOT</version> 
    <type>**ejb**</type> 
</dependency>