[maven] Maven :이 프로젝트의 패키징은 빌드 아티팩트에 파일을 할당하지 않았습니다.

Mac 10.6.6에서 Maven 3.0.3을 사용하고 있습니다. JAR 프로젝트가 있고 “mvn clean install : install”명령을 실행하면 오류가 발생합니다.

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-install-plugin:2.3.1:install (default-cli) on project StarTeamCollisionUtil: The packaging for this project did not assign a file to the build artifact -> [Help 1]

이것이 의미하는 바는 무엇이며 어떻게 해결할 수 있습니까? 아래는 내 pom.xml입니다. 어떤 다른 정보가 도움이 될지 알려 주시면이 게시물을 수정하겠습니다. 감사합니다-데이브

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.myco.starteam.util</groupId>
<artifactId>StarTeamCollisionUtil</artifactId>
<packaging>jar</packaging>
<name>StarTeam Collision Util</name>
<description>
    The StarTeam Collision Utility provides developers and release engineers alike the ability to
    compare files attached to a set of CRs to see if conflicts exist in the change set.
</description>
<version>1.0-SNAPSHOT</version>
<url>http://cm-build.myco.com:8080/hudson/view/Tools/job/StarTeamCollisionUtil - TRUNK/</url>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<repositories>
    <repository>
        <id>myco-sonatype-nexus-snapshots</id>
        <name>MyCo Sonatype-Nexus Snapshots</name>
        <url>http://sonatype.myco.com/nexus/content/repositories/snapshots/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>starteam</groupId>
        <artifactId>starteam</artifactId>
        <version>1.1.0</version>
        <type>jar</type>
        <scope>system</scope>
        <systemPath>${basedir}/lib/starteam110.jar</systemPath>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.8.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.ant</groupId>
        <artifactId>ant</artifactId>
        <version>1.8.1</version>
    </dependency>
    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4.1</version>
        <type>jar</type>
        <scope>compile</scope>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.8.1</version>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-site-plugin</artifactId>
            <version>3.0-beta-3</version>
            <configuration>
                <reportPlugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-report-plugin</artifactId>
                        <version>2.5</version>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <version>2.7</version>
                        <configuration>
                            <linksource>true</linksource>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-jxr-plugin</artifactId>
                        <version>2.2</version>
                    </plugin>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>versions-maven-plugin</artifactId>
                        <version>1.2</version>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-project-info-reports-plugin</artifactId>
                        <version>2.3.1</version>
                        <reportSets>
                            <reportSet>
                                <reports>
                                    <report>index</report>
                                    <report>dependencies</report>
                                    <report>dependency-management</report>
                                    <report>cim</report>
                                    <report>issue-tracking</report>
                                    <report>license</report>
                                    <report>scm</report>
                                </reports>
                            </reportSet>
                        </reportSets>
                    </plugin>
                </reportPlugins>
            </configuration>
        </plugin>
    </plugins>
</build>
<distributionManagement>
    <repository>
        <id>sonatype-nexus</id>
        <url>http://sonatype.myco.com/nexus/content/repositories/snapshots/</url>
    </repository>
</distributionManagement>
<scm>
    <url>https://starteam.cmass.myco.com/BorlandStarTeam/BorlandStarTeam.jsp</url>
</scm>
<issueManagement>
    <system>StarTeam</system>
    <url>https://starteam.cmass.myco.com/BorlandStarTeam/BorlandStarTeam.jsp</url>
</issueManagement>
<ciManagement>
    <system>Hudson</system>
    <url>http://cm-build.myco.com:8080/hudson/</url>
</ciManagement>
</project>



답변

이것이 답인지 아닌지는 모르겠지만 올바른 방향으로 인도 할 수 있습니다 …

이 명령 install:install은 실제로 maven-install-plugin 의 목표입니다 . 이것은 installmaven 수명주기 단계 와 다릅니다 .

Maven 수명주기 단계 는 특정 플러그인이 자신을 바인딩 할 수있는 빌드의 단계입니다. 단일 수명주기 단계를 호출하면 서로 다른 플러그인의 다양한 목표가 실행될 수 있습니다.

이것이 귀결되는 것은 명령입니다 …

mvn clean install

다른 …

mvn clean install:install

전자는 설치 (컴파일, 패키지, 테스트 등)를 포함하여 모든주기에서 모든 목표를 실행합니다. 후자는 코드를 컴파일하거나 패키징하지 않고 단지 하나의 목표를 실행합니다. 이것은 예외를 보면 이해가됩니다. 다음에 대해 이야기합니다.

StarTeamCollisionUtil :이 프로젝트의 패키징은 빌드 아티팩트에 파일을 할당하지 않았습니다.

전자를 시도하면 오류가 사라질 수 있습니다!


답변

TL; DR 하려면에 대한 예를 들어, 이전 플러그인 포장 호출이 문제를 해결 jar사용 포장 maven-jar-plugin다음과 같이 :

mvn jar:jar install:install

또는

mvn jar:jar deploy:deploy 

실제로 배포해야하는 경우.

Gotcha 이 접근 방식은 다른 패키징 (ear / war / jar / zip)이있는 다중 모듈 프로젝트가있는 경우 작동하지 않습니다. 더 나쁜 것은 잘못된 아티팩트가 설치 / 배포된다는 것입니다! 이 경우 리액터 옵션을 사용하여 배포 가능한 모듈 (예 🙂 만 빌드하십시오 war.


설명

어떤 경우에는 실제로 직접 실행하도록 할 install:install또는 deploy:deploy목표 (즉,에서 maven-deploy-plugindeploy목적이 아닌 메이븐 deploy 단계 )하고 성가신에 끝날 것입니다 The packaging for this project did not assign a file to the build artifact.

고전적인 예는 CI 작업 (예 : Jenkins 또는 Bamboo 작업)으로, 다른 단계에서 다른 측면을 실행 / 관리하려는 경우입니다.

  • 첫 번째 단계는 mvn clean install테스트 및 테스트 범위를 수행하는 것입니다.
  • 제 2 단계는 예를 들면, 품질 프로파일에 기초하여 분석 Sonarqube 것 mvn sonar:sonar플러스 추가 옵션
  • 그런 다음 성공적인 테스트 실행과 품질 게이트를 통과 한 후에 만 ​​Maven 엔터프라이즈 저장소에 최종 프로젝트 아티팩트를 배포하고 싶지만 mvn deploy이전 단계를 다시 실행 (및 컴파일, 테스트)하므로 다시 실행 하고 싶지 않습니다. 등) 빌드가 효과적이고 빠르기 를 원합니다 .

예, 테스트 -Dmaven.test.skip=true를 건너 뛰거나 (컴파일 및 실행,을 통해 ) 이 마지막 단계의 속도를 높이 거나 특정 프로필 (가능한 한 많은 플러그인을 건너 뛰기 위해)으로 재생할 수 있지만 그 mvn deploy:deploy다음 실행하는 것이 훨씬 쉽고 명확합니다 .

그러나 플러그인 FAQ에 지정된대로 위의 오류로 인해 실패합니다 .

패키징 단계에서 모든 것이 수집되어 컨텍스트에 배치됩니다. 이 메커니즘을 통해 Maven은 및가 동일한 파일 세트를 복사 / 업로드 maven-install-plugin하고 있는지 확인할 수 maven-deploy-plugin있습니다. 따라서 만 실행 deploy:deploy하면 컨텍스트에 파일이 배치되지 않고 배포 할 파일이 없습니다.

실제로 deploy:deploy이전 단계 (또는 이전 플러그인 / 목표 실행)에 의해 빌드 컨텍스트에 배치 된 일부 런타임 정보 가 필요합니다.

또한 잠재적 버그로보고되었습니다. MDEPLOY-158: deploy : deploy는 Maven 원격 저장소에 아티팩트 배포에만 작동하지 않습니다.

그러나 문제가 아닌 것으로 거부되었습니다.

deployAtEnd구성 옵션은 maven-deploy-plugin실행할 중간 작업 단계가 있으므로 특정 시나리오에서는 도움이되지 않습니다.

모든 프로젝트가 자체 배포 단계에서 배포되어야하는지 또는 다중 모듈 빌드가 끝날 때 배포되어야하는지 여부입니다. 로 설정되고 true빌드가 실패하면 원자로 프로젝트가 배포되지 않습니다. (실험적)

그래서 그것을 고치는 방법?
유사한 세 번째 / 마지막 단계에서 다음을 실행하기 만하면됩니다.

mvn jar:jar deploy:deploy

(가) maven-jar-plugin빌드의 일환으로 모든 병을 다시 만들지 않습니다, 그 덕분에 forceCreation옵션 세트에 false기본적으로 :

내용이 변경되지 않은 것으로 보이는 경우에도 새 JAR을 빌드하려면 jar 플러그인이 필요합니다. 기본적으로이 플러그인은 출력 jar가 존재하고 입력이 변경되지 않았는지 확인합니다. 이러한 조건이 참이면 플러그인은 jar 생성을 건너 뜁니다.

그러나 그것은 우리를 위해 빌드 컨텍스트를 멋지게 채우고 deploy:deploy행복하게 만들 것입니다. 건너 뛸 테스트 나 추가 할 프로필이 없습니다. 필요한 것 : 속도.


추가 참고 : 당신이 사용하는 경우 build-helper-maven-plugin, buildnumber-maven-plugin에 의해 사용 나중에 메타 데이터를 생성하는 다른 유사한 플러그인을하거나 maven-jar-plugin(매니페스트 파일을 예를 들어 항목), 당신은 대부분의 아마 연결 실행이 validate상을 당신은 여전히 동안을 갖고 싶어 jar:jar빌드 단계 (아무런 및 빠른 실행을 유지). 이 경우 거의 무해한 오버 헤드는 다음과 같이 validate 단계 를 호출하는 것입니다 .

mvn validate jar:jar deploy:deploy

또 다른 추가 참고 : 당신이하지 않은 경우 jar지만, 말, war포장, 사용하기 war:war전에 설치 / 대신에 배포 할 수 있습니다.

잡았다 으로 멀티 모듈 프로젝트에 체크 행동, 위 지적했다.


답변

이 답변은이 문제에 직면 한 다른 사람들을 돕기 위해 매우 오래된 질문에 대한 것입니다.

IDE를 Java사용하여 프로젝트 에서 작업하는 동안 실패한 오류가 발생했습니다 IntelliJ IDEA.

Failed to execute goal org.apache.maven.plugins:maven-install-plugin:2.4:install (default-cli) on project getpassword: The packaging for this project did not assign a file to the build artifact

아래 이미지에서 빨간색 화살표가 가리키는 것처럼 install:install아래 Plugins - install에서 선택하면 실패합니다 .

잘못된 선택 선택

내가 실행하면 선택한 install에서 Lifecycle문제가 사라, 위의 그림과 같이, 내 받는다는 성공적으로 컴파일 빌드를 설치합니다.


답변

나는 같은 문제가 있습니다. 나를위한 오류 메시지가 완전하지 않습니다. 하지만 제 경우에는 소스와 함께 생성 항아리를 추가했습니다. 이 코드를 pom.xml에 배치하면 :

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <artifactId>maven-source-plugin</artifactId>
                <version>2.1.2</version>
                <executions>
                    <execution>
                        <phase>deploy</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

그래서 배포 단계에서 소스와 함께 jar를 생성하는 source : jar 목표를 실행합니다. 배포는 성공으로 끝납니다.


답변

jar 및 기타와 같은 대상 파일을 지워야합니다. C : .m2에서 폴더를 드라이브합니다. 설치 위치를 확인하고 .jar 파일을 삭제하고 Snaphot 파일을 삭제하고 대상 파일을 삭제 한 다음 실행될 응용 프로그램을 정리합니다.


답변

이 오류는 maven-install-plugin 버전 3.0.0-M1 (또는 유사)을 사용할 때 나타납니다.

위에서 이미 언급했듯이 여기에서도 다음 플러그인 버전이 작동합니다.

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-install-plugin</artifactId>
        <version>2.5.2</version>
    </plugin>


답변

@ A_Di-Matteo 대답은 비 다중 모듈에서 작동하지만 다중 모듈에 대한 솔루션이 있습니다.

해결책은 모든 플러그인 구성을 재정 none의하여 jar / war / ear 플러그인 및 배포 플러그인을 제외하고의 단계에 바인딩되도록하는 것 입니다. 단일 모듈이 있더라도 내 초보적인 테스트는 이것이 성능면에서 조금 더 빠르다는 것을 보여줍니다.

따라서 트릭은 배포를 원할 때만 활성화되는 위의 작업을 수행하는 프로필을 만드는 것입니다.

아래는 shade 플러그인을 사용하는 내 프로젝트 중 하나의 예이므로 덮어 쓰지 않도록 jar 플러그인을 다시 재정의해야했습니다.

    <profile>
      <id>deploy</id>
      <activation>
        <property>
          <name>buildStep</name>
          <value>deploy</value>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <executions>
              <execution>
                <id>default-compile</id>
                <phase>none</phase>
              </execution>
              <execution>
                <id>default-testCompile</id>
                <phase>none</phase>
              </execution>
              <execution>
                <id>test-compile</id>
                <phase>none</phase>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <executions>
              <execution>
                <id>default-test</id>
                <phase>none</phase>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-install-plugin</artifactId>
            <executions>
              <execution>
                <id>default-install</id>
                <phase>none</phase>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <executions>
              <execution>
                <id>default-resources</id>
                <phase>none</phase>
              </execution>
              <execution>
                <id>default-testResources</id>
                <phase>none</phase>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <executions>
              <execution>
                <id>default</id>
                <phase>none</phase>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <executions>
              <execution>
                <id>default-jar</id>
                <configuration>
                  <forceCreation>false</forceCreation>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>

이제 mvn deploy -Pdeploy실행하면 jar 만 실행되고 플러그인이 배포됩니다.

재정의해야하는 플러그인을 파악하는 방법은 배포를 실행하고 로그를보고 어떤 플러그인이 실행 중인지 확인하는 것입니다. id플러그인 이름 뒤에 괄호가있는 플러그인 구성을 추적하십시오 .