2014-07-18 5 views
0

PROJECT-A는 전쟁입니다. 그것은 PROJECT-B의 단위 테스트에서 사용하고자하는 몇 가지 코드가 있습니다.다른 프로젝트의 테스트를위한 Maven building jar.

이렇게하려면 클래스가있는 jar를 출력하려면 PROJECT-A가 필요하다고 생각합니다.

<project 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" 
     xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <parent> 
     <groupId>au.com.name.redacted</groupId> 
     <artifactId>PARENT-PROJECT</artifactId> 
     <version>1.0</version> 
    </parent> 
    <modelVersion>4.0.0</modelVersion> 
    <artifactId>PROJECT-A</artifactId> 
    <packaging>war</packaging> 

    ... snip 

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

내가

D:\Workspace\name\PROJECT-A\target\PROJECT-A-1.0.jar 
D:\Workspace\name\PROJECT-A\target\PROJECT-A-1.0.war 

를 볼 수 있습니까

cd PROJECT-A 
mvn clean install 

[INFO] --- maven-jar-plugin:2.4:jar (PROJECT-A-jar) @ PROJECT-A --- 
[INFO] Building jar: D:\Workspace\name\PROJECT-A\target\PROJECT-A-1.0.jar 
[INFO] 
[INFO] --- maven-install-plugin:2.4:install (default-install) @ PROJECT-A --- 
[INFO] Installing D:\Workspace\name\PROJECT-A\target\PROJECT-A-1.0.jar to C:\Users\myusername\.m2\repository\au\com\name\PARENT-PROJECT\PROJECT-A\1.0\PROJECT-A-1.0.war 

를 출력 실행하면하지만 난이 표시되지 않는 다음은 POM의 발췌입니다 내 레포에 항아리 - 오직 전쟁.

C:\Users\myusername\.m2\repository\au\com\name\PARENT-PROJECT\PROJECT-A\1.0\PROJECT-A-1.0.war 

그럼 PROJECT-B에 나는 그것이 종속성으로 PROJECT-A를 얻을 수있는 시도하고 ..

<project 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" 
     xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <parent> 
     <groupId>au.com.name.redacted</groupId> 
     <artifactId>PARENT-PROJECT</artifactId> 
     <version>1.0</version> 
    </parent> 
    <modelVersion>4.0.0</modelVersion> 
    <artifactId>PROJECT-B</artifactId> 
    <packaging>war</packaging> 
... snip 
<dependency> 
    <groupId>au.com.name.redacted</groupId> 
    <artifactId>PROJECT-A</artifactId> 
    <version>1.0</version> 
    <scope>test</scope> 
</dependency> 

그리고 내가 사용했습니다

 [ERROR] Failed to execute goal on project PROJECT-B: Could not resolve dependencies for project au.com.name.redacted:PROJECT-B:war:1.0: Failure to find au.com.name.redacted:PROJECT-A:jar:1.0 in http://repo.server.com.au:8081/artifactory/repo was cached in the local repository, resolution will not be reattempted until the update interval of repo has elapsed or updates are forced -> [Help 1] 
+4

는 소리를 모두 당신을 전쟁과 시험 프로젝트는 그것에 달려있다. –

+1

문제는 그와 관련이 있으며, 일반적으로 잘못된 패키징이 여러 개 있습니다. 당신은'maven-assembly-plugin'을 사용하여이 문제를 해결할 수 있습니다. 그러나 가장 좋은 해결은 @NickWilson이 말했듯이, 프로젝트를 분리하고 jar로 패키징하기위한 공통 코드를 추출하는 것입니다. – user902383

+1

빌드에 추가 아티팩트를 첨부하려면 " Build Helper Maven Plugin "-> http://mojo.codehaus.org/build-helper-maven-plugin/ @NickWilson이 말했듯이 프로젝트가 제대로 배치되어 있다면 거의 필요하지 않습니다. –

답변

1

실패 이 목적을 위해 전쟁 플러그인. 어쩌면이 도움이 될 것입니다

  <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
       <version>2.3</version> 
       <configuration> 
        <attachClasses>true</attachClasses> 
       </configuration> 
      </plugin> 

이 지역 m2의 환매 특약에 최선을 다하고됩니다 빌드 후 소스와 전쟁과 항아리를 생성합니다. 구성 <attachClasses>true</attachClasses>이 중요합니다.

이 같은 프로젝트 B 사용 뭔가 (중요한 부분 - <classifier>classes</classifier>)의 치어에서

: 당신은 "항아리"포장 형식의 새로운 프로젝트로 밖으로 공통 코드를 끌어와이 필요 같은

<dependency> 
    <groupId>projectA-groupid</groupId> 
    <artifactId>projectA-artifactId</artifactId> 
    <version>projectA-version</version> 
    <classifier>classes</classifier> 
</dependency> 
+0

POM에는 이미 메이븐 - 전쟁 플러그인이 있지만 JAR을 생성하지는 않는다고 생각한다. 나는 WAR가 나오는 것을보고있다. –

+1

좋아, 어쩌면 내가 충분히 명확하지 :) 구성 부분 ' 사실'나를 위해 일을 않습니다. –

+0

글쎄, 흥미 롭습니다. 이제는 내 repo에서'PROJECT-A-1.0.classes.jar'을 볼 수 있습니다. 이것은 앞으로 나아갈 것입니다. 내가 Project-B에게'PROJECT-A-1.0.classes.jar' 대신'PROJECT-A-1.0.classes.jar1'을 찾도록 어떻게 이야기하는지 알고 있습니까? –

관련 문제