2016-07-30 9 views
2

를 설치/구축, 메인 출력이 전쟁 파일입니다Maven 프로젝트 포장은 전쟁뿐만 아니라 내가 메이븐 3.3 프로젝트를 항아리

<artifactId>pro</artifactId> 
<version>1.0-SNAPSHOT</version> 
<packaging>war</packaging> 

나는 또한 jar 파일을 구축하는 플러그인 받는다는을 사용하고, target/pro-1.0-SNAPSHOT.jar에 들어가고 이것이 작동합니다.

내가 로컬 받는다는의 repo이 항아리를 설치하고자하는, 그래서이 작업을 수행하는 플러그인을 설치 받는다는을 사용하고 있습니다 :

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-install-plugin</artifactId> 
    <version>2.5.2</version> 
    <configuration> 
     <classifier>jar</classifier> 
     <packaging>jar</packaging> 
     <file>target/pro-1.0-SNAPSHOT.jar</file> 
    </configuration> 
    <executions> 
     <execution> 
      <id>do-jar-install</id> 
      <phase>install</phase> 
      <goals> 
       <goal>install</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

전체 빌드가 항아리를 제외하고 잘 작동 단계는을 설치하고 설치 전쟁이 아니라 항아리. 어떻게 이것을 무시합니까?

**

건물의 항아리 :/사용자/마이크/코드 여기

http://maven.apache.org/plugins/maven-install-plugin/examples/installing-secondary-artifacts.html 내 빌드의 로그입니다 : 내가 사용할 수있는 보려면 여기를 찾고 있어요

/workspace/pro/target/pro-1.0-SNAPSHOT.jar

는 는

[정보]는 --- Maven은 설치 - 플러그인 : 2.5.2 : 프로

,536 @ (-항아리 설치 않음) 설치를

[정보] /Users/mike/code/workspace/pro/target/pro-1.0-SNAPSHOT.jar을 /Users/mike/.m2/repository/net/mikeski/pro/1.0-SNAPSHOT/pro-1.0에 설치하십시오. -SNAPSHOT.war

참고 마지막 줄은 - 그것은 항아리를 따기하지만 전쟁 나는 그것을 고칠 수있는 방법

를 설치하는거야? 요청으로

, 여기에 항아리 플러그인 설정입니다 :

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <version>2.4</version> 
    <executions> 
     <execution> 
      <id>create-jar</id> 
      <phase>install</phase> 
      <goals> 
       <goal>jar</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

그것은 프로젝트의 파일의 항아리를 생성하고, 올바른 항아리입니다. 내 레포에 설치된 전쟁jar으로 복사하면 (다른 사람의 프로젝트에서 확장자를 변경하기 때문에) 다른 프로젝트에서도 잘 처리 할 수 ​​있습니다.

답변

3

현재 출력은 다중 고려 사항의 결과이며 그 중 하나는 maven-jar-plugin이며 버전 2.4에서는 허용되지 않습니다.

우선 Maven 저장소 내부에서 모든 이슈는 artifactId-version(-classifier).packaging이라는 단일 명명 규칙을 공유한다는 것을 기억해야합니다. 이는 빌드가 생성하는 파일의 로컬 이름이 무엇이든간에 (즉, foo.jar으로 지정) 설치되고 기존 이름으로 배포된다는 것을 의미합니다. 이슈가 설치 될 때 중요한 것은 Maven coordinates입니다. 즉 groupId, artifactId, 버전, 분류 자 ​​및 패키지입니다.

은 여기에서 일어나고있는 것은 :

  1. 프로젝트는 포장 war 있습니다.mvn install으로 Maven을 실행하면 default-install 단계가 먼저 호출되고 maven-install-plugin:install 목표가 처음 실행되어 WAR 프로젝트가 설치됩니다. 당신의 로그에, 당신은 발견 할 것이다 :

    [INFO] --- maven-install-plugin:2.5.2:install (default-install) @ test-war --- 
    [INFO] Installing ...\test-war\target\test-war-0.0.1-SNAPSHOT.war to ...\test-war\0.0.1-SNAPSHOT\test-war-0.0.1-SNAPSHOT.war 
    [INFO] Installing ...\test-war\pom.xml to ...\test-war\0.0.1-SNAPSHOT\test-war-0.0.1-SNAPSHOT.pom 
    
  2. 를 그리고, 당신은 JAR를 만들 maven-jar-plugin:jar 목표를 사용하고 있습니다. 이 플러그인은 현재 Maven 프로젝트를위한 JAR 파일을 생성합니다. 그래도 괜찮습니다.하지만이 새 이슈의 Maven 좌표는 WAR 프로젝트의 Maven 좌표와 정확히 같습니다 (classifier을 지정하지 않았습니다). 따라서 JAR 파일로 주 이슈 파일 (WAR)을 효과적으로 대체 할 수 있습니다. jar (이 방법으로 maven-jar-plugin을 생성했기 때문에) 확장자를 가진 로컬 파일로 끝납니다.이 파일은 Maven 프로젝트 포장의 주요 유물 war. 꽤 혼란 스럽다.

    나는 maven-jar-plugin이 너무 관대하다는 것을 기억 하는가? 당신이 플러그인의 버전 3.0.2으로 업데이트하는 경우, 당신은 여기 (MJAR-198) 오류가 발생합니다 :

    당신은 그들을 대체하는 대신 프로젝트에 추가 아티팩트를 연결하는 분류를 사용해야합니다. -> [도움말 1]

    위의 내용을 요약 한 것입니다.

  3. 마지막으로이 로컬 JAR 파일을 설치하기로되어있는 do-jar-install이라는 이라는 또 다른 실행을 선언했습니다. 그리고 이것이하는 일입니다 : 이큐먼트의 좌표를 사용하여 로컬 Maven 저장소에 target 폴더 내의 로컬 JAR 파일을 설치합니다. 혼란은 이제 ... 이슈의 종류 (포장) 사실 전쟁에, 그래서 설치되는 것은 WAR 파일 (있는 효과적으로 JAR)이라는 사실이 우리를


온다 문제를 설명했는데 문제는 무엇을하고 싶습니까? WAR 프로젝트에 클래스로 구성된 추가 이슈를 첨부하려는 것 같습니다. 이 모든 구성이 필요하지 않으므로 maven-war-pluginattachClasses 매개 변수를 사용할 수 있습니다.

<plugin> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.6</version> 
    <configuration> 
    <attachClasses>true</attachClasses> 
    </configuration> 
</plugin> 
+0

덕분에, 별도의 메이븐 모듈 내 기관 및 인터페이스 별도이었고, 두 프로젝트에서 그것을 사용합니다. 이것은 질문에 대한 정답이지만 내 문제에 대한 해결책은 아닙니다. – mikeb

0

당신이받은 때문에 플러그인을 두 번 호출 :

  1. 실행 단계
  2. 패키지 -이 더 강력한 이유가 없다 당신은 모든 신경이 가지고하는 경우 기본 단계

프로젝트에서 생성 된 하나의 JAR 파일 만 사용하십시오. 같은

뭔가 : 난 정말 할 필요가 무엇

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jar-plugin</artifactId> 
     <version>2.6</version> 
     <configuration> 
      <outputDirectory>${outputDirectory}</outputDirectory> 
     </configuration> 
</plugin>