2017-01-16 4 views
2

우리는 Ant에서 빌드하는 데 사용되는 상당히 복잡한 프로젝트를 가지고 있지만 지금은 Maven으로 이동 중입니다.Ant에서 Maven으로 이동 : EAR 프로젝트를 어떻게 설정합니까?

  1. 코어 jar와 코어 jar에 의존하는 다양한 필터 jar가 있습니다.
  2. 이러한 jar는 다른 종속 jar 및 몇 개의 XML 파일과 함께 SAR으로 어셈블됩니다. 나는 이것을 아래에 foo-sar이라고 불렀다.
  3. JAR이 빌드되어 있지만이 JAR에는 Java 코드가없고 일부 애플리케이션 xml 파일 만 포함되어 있습니다. 나는 이것을 아래에 foo-jar이라고 불렀다.
  4. foo-jarfoo-sarMETA-INF 디렉토리에있는 application.xml 파일이있는 EAR에 패키지되어 있습니다.

    • foo-jar
    • foo-sar
    • foo-ear

    모두 foo-jarfoo-sar 빌드 잘 :

나는 세 개의 하위 프로젝트와 Maven 프로젝트가 있습니다. 그러나 foo-ear이 빌드 될 때 application.xml 파일을 가지고 있지만 foo-jarfoo-sar이없는 귀를 만듭니다. 내 디렉토리 구조는 다음과 같습니다

parent Dir --+ 
      | 
      +-- foo-ear 
      | 
      +-- foo-jar 
      | 
      +-- foo-sar 

올바른 순서 (foo-sar, foo-jarfoo-ear)의 세 가지 프로젝트를 호출 pom.xml 부모 디렉토리. foo-jarfoo-sar이 모두 올바르게 빌드됩니다 (즉, Ant 빌드의 결과와 일치했습니다). foo-ear 프로젝트는 오류없이 작성되지만 귀의 루트에 foo-sarfoo-jar 파일을 포함하지 않습니다.

나는 아주 간단한 것을 놓치고 있습니다. 어쩌면 추가 매개 변수 또는 다른 구성 일 수 있습니다.

다음은 귀의 pom.xml을이다 : 나는 <groupId>maven-ear-plugin에 대한 org.apache.maven.pluginsorg.apache.plugins하지로 설정되어 있다는 것입니다 가지고 있던 문제 중 하나 실현

<project> 
    <modelVersion>4.0.0</modelVersion> 

    <parent> 
    <groupId>com.vegicorp.foo</groupId> 
    <artifactId>foo-parent</artifactId> 
    <version>1.0.0</version> 
    </parent> 
    <groupId>com.vegicorp.foo</groupId> 
    <artifactId>foo-app</artifactId> 
    <packaging>ear</packaging> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.plugins</groupId> 
     <artifactId>maven-ear-plugin</artifactId> 
     <version>2.10.1</version> 
     <configuration> 
      <artifactTypeMappings> 
      <!-- The sar is a "jboss-sar" and not just a "sar" --> 
      <artifactTypeMapping type="jboss-sar" mapping="sar"/> 
      </artifactTypeMappings> 
      <modules> 
      <jarModule> 
       <artifactId>foo-jar</artifactId> 
       <unpack>true</unpack> 
      </jarModule> 
      <sarModule> 
       <artifactId>foo-sar</artifactId> 
       <unpack>true</unpack> 
      </sarModule> 
      </modules> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

새로운 문제

합니다. 메이븐 (Maven)이 전에이 오류를 감지하지 못했고 전에 오류가 발생했다는 것을 알지 못합니다. 나는 올바른 그룹을 설정하면

, 나는 application.xml 내가 <generateApplicationXml>이 거짓이라고 규정에도 불구하고 건설되고 있음에 주목하기 시작했다. 나는 이것이 generate-application-xml 목표에서 일어 났음을 깨달았으며, 분명히 <configuration>의 기본 목표는 ear입니다.따라서 generate-application-xml 목표는 <execution>이고 목표는 ear입니다.

재미 있고 재미 있습니다. 나는 하나의 사소한 문제을 제외하고 을 생성 할 수있는 귀를 입수했습니다

은 귀에서 종속성 내가 다르게 조금을 내 모듈 정보를 구성에도 불구하고 어쨌든 다운로드되고있다. 귀가 생성되는 것 여기

<project> 
    <modelVersion>4.0.0</modelVersion> 

    <parent> 
    <groupId>com.vegicorp.foo</groupId> 
    <artifactId>foo-parent</artifactId> 
    <version>1.0.0</version> 
    </parent> 
    <groupId>com.vegicorp.foo</groupId> 
    <artifactId>foo-app</artifactId> 
    <packaging>ear</packaging> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-ear-plugin</artifactId> 
     <version>2.10.1</version> 
     <executions> 
      <execution> 
      <id>skip-application-xml-generation</id> 
      <phase>package</phase> 
      <goals> 
       <goal>generate-application-xml</goal> 
      </goals> 
      <configuration> 
       <generateApplicationXml>false</generateApplicationXml> 
      </configuration> 
      </execution> 
      <execution> 
      <id>create-ear</id> 
      <phase>package</phase> 
      <goals> 
       <goal>ear</goal> 
      </goals> 
      <configuration> 
       <artifactTypeMappings> 
       <artifactTypeMapping type="jboss-sar" mapping="sar"/> 
       </artifactTypeMappings> 
       <modules> 
       <jarModule> 
        <groupId>${project.groupId}</groupId> 
        <artifactId>foo-jar</artifactId> 
        <unpack>true</unpack> 
        <uri>FooJar.jar</uri> 
       </jarModule> 
       <sarModule> 
        <groupId>${project.groupId}</groupId> 
        <artifactId>foo-sar</artifactId> 
        <unpack>true</unpack> 
        <uri>Foo.sar</uri> 
       </sarModule> 
       </modules> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    <dependencies> 
    <dependency> 
     <groupId>${project.groupId}</groupId> 
     <artifactId>foo-sar</artifactId> 
     <version>${project.version}</version> 
     <type>sar</type> 
     <exclusions> 
     <exclusion> 
      <groupId>*</groupId> 
      <artifactId>*</artifactId> 
     </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>${project.groupId}</groupId> 
     <artifactId>foo-jar</artifactId> 
     <version>${project.version}</version> 
     <exclusions> 
     <exclusion> 
      <groupId>*</groupId> 
      <artifactId>*</artifactId> 
     </exclusion> 
     </exclusions> 
    </dependency> 
    </dependencies> 
</project> 

을 그리고 : 내 귀에

내가에서 foo-1.0.0.jarfoo-sar-1.0.0.sar을 방지하기 위해 내 귀를 구성하는 방법
$ ls -l foo-app/target/foo-app-1.0.0 
drwxr-xr-x 3 david staff  102 Jan 17 11:21 Foo.jar 
drwxr-xr-x 137 david staff  4658 Jan 17 11:21 Foo.sar 
drwxr-xr-x 4 david staff  136 Jan 17 11:21 META-INF 
-rw-r--r-- 1 david staff  3905 Jan 17 11:21 foo-1.0.0.jar 
-rw-r--r-- 1 david staff 50104182 Jan 17 11:21 foo-sar-1.0.0.sar 

포함되고 여기에 귀 내 pom.xml이야? 내 귀의 <module> 섹션을 내 모듈에 내 종속성을 매핑해야합니까? <configuration>

+0

당신은 또한 유물 이름을 제공하는 것만으로는 충분하지 않습니다, EAR 프로젝트에 대한 의존성로 항아리 모듈을 추가한다고 생각합니다. – arghtype

+0

''에 모듈을 포함 시켰고 모듈을 다운로드했지만'pom.xml'의''섹션이 무시되었습니다. 나는 의존성이 정상적인 의존성처럼 행동하는 것처럼 보인다. 위치, 이름, 압축을 풀지 않은 것을 지정할 수 없다. 그것은 작동하지 않는 것 같습니다. –

+0

문제점을 발견했습니다. 나는 ''이'org.apache.maven.plugins'가 아니라'org.apache.plugins'라고 지정했습니다. 당신은 종속성에 대해 옳았 습니다만, 지금은 위에서 설명한 다른 문제들을 가지고 있습니다. –

답변

0

해결책을 찾았습니다. 아마 훨씬 더 나은 해결책이있을 것입니다. 그러나 이것이 제가 발견 한 것입니다. 크고 험악하고 괴롭다. 내가 얼마나 틀렸는 지 알려주시고 이 정확해야합니다.해야합니다.

arghtype으로 지적했듯이 이러한 모듈을 내 의존성에 추가해야합니다. 그렇게하는 것이 효과적입니다. 그러나, 나는 또한 그것이 나의 모든 의존성을 포함하고 내 귀에 그것들을 다운로드한다는 것을 발견했다. 내가 포함하고있는 모듈 중 하나가 엄청난 수의 항아리 종속성을 포함하고있는 SAR이라는 것을 고려하면 그것은 어리석은 짓입니다.

종속성을 제거하기 위해 원래 종속성 설명에서 <exclusions>을 시도했지만 추가 된 jar 및 sar를 제거하지 못했습니다. 내가 마침내 한 일은 을 내 pom.xml에 넣어 다운로드하지 못하도록 막았습니다.

이 작동하지만,이 일을 더 나은 방법이 있어야합니다 :

<project> 
    <modelVersion>4.0.0</modelVersion> 

    <parent> 
    <groupId>com.vegicorp.foo</groupId> 
    <artifactId>foo-parent</artifactId> 
    <version>1.0.0</version> 
    </parent> 
    <groupId>com.vegicorp.foo</groupId> 
    <artifactId>foo-app</artifactId> 
    <packaging>ear</packaging> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-ear-plugin</artifactId> 
     <version>2.10.1</version> 
     <executions> 
      <execution> 
      <id>skip-application-xml-generation</id> 
      <phase>package</phase> 
      <goals> 
       <goal>generate-application-xml</goal> 
      </goals> 
      <configuration> 
       <generateApplicationXml>false</generateApplicationXml> 
      </configuration> 
      </execution> 
      <execution> 
      <id>create-ear</id> 
      <phase>package</phase> 
      <goals> 
       <goal>ear</goal> 
      </goals> 
      <configuration> 
       <artifactTypeMappings> 
       <artifactTypeMapping type="jboss-sar" mapping="sar"/> 
       </artifactTypeMappings> 
       <modules> 
       <jarModule> 
        <groupId>${project.groupId}</groupId> 
        <artifactId>foo-jar</artifactId> 
        <unpack>true</unpack> 
        <uri>FooJar.jar</uri> 
       </jarModule> 
       <sarModule> 
        <groupId>${project.groupId}</groupId> 
        <artifactId>foo-sar</artifactId> 
        <unpack>true</unpack> 
        <uri>Foo.sar</uri> 
       </sarModule> 
       </modules> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    <dependencies> 
    <dependency> 
     <groupId>${project.groupId}</groupId> 
     <artifactId>foo-sar</artifactId> 
     <version>${project.version}</version> 
     <type>sar</type> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>${project.groupId}</groupId> 
     <artifactId>foo-jar</artifactId> 
     <version>${project.version}</version> 
     <scope>provided</scope> 
    </dependency> 
    </dependencies> 
</project>