Maven: Đóng gói cho dự án này không chỉ định tệp cho tạo tác bản dựng


113

Tôi đang sử dụng Maven 3.0.3 trên Mac 10.6.6. Tôi có một dự án JAR và khi tôi chạy lệnh "mvn clean install: install", tôi gặp lỗi,

[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]

Điều này có nghĩa là gì và tôi có thể sửa chữa nó như thế nào? Dưới đây là pom.xml của tôi. Hãy cho tôi biết những thông tin khác sẽ hữu ích và tôi sẽ chỉnh sửa bài đăng này. Cảm ơn, - Dave

<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>

Câu trả lời:


168

Tôi không biết đây có phải là câu trả lời hay không nhưng nó có thể dẫn bạn đi đúng hướng ...

Lệnh install:installthực sự là một mục tiêu trên maven-install-plugin . Điều này khác với installgiai đoạn vòng đời của maven.

Các giai đoạn vòng đời của Maven là các bước trong một bản xây dựng mà một số plugin nhất định có thể tự liên kết. Nhiều mục tiêu khác nhau từ các plugin khác nhau có thể thực thi khi bạn gọi một giai đoạn vòng đời duy nhất.

Điều này tổng hợp lại là lệnh ...

mvn clean install

la khac nhau tư...

mvn clean install:install

Trước đó sẽ chạy tất cả các mục tiêu trong mọi chu kỳ dẫn đến và bao gồm cài đặt (như biên dịch, gói, thử nghiệm, v.v.). Cái sau thậm chí sẽ không biên dịch hoặc đóng gói mã của bạn, nó sẽ chỉ chạy một mục tiêu đó. Loại này có lý, nhìn vào ngoại lệ; nó nói về:

StarTeamCollisionUtil: Đóng gói cho dự án này không gán một tệp cho cấu phần xây dựng

Hãy thử cái trước và lỗi của bạn có thể biến mất!


Tôi đang chạy qua Bamboo, nhưng tôi không thấy bất cứ điều gì cài đặt mvn: cài đặt bất kỳ nơi nào trong cấu hình
Pra_A

96

TL; DR Để khắc phục sự cố này, hãy gọi plugin đóng gói trước, ví dụ như để jarsử dụng đóng gói maven-jar-plugin, như sau:

mvn jar:jar install:install

Hoặc là

mvn jar:jar deploy:deploy 

Nếu bạn thực sự cần thiết để triển khai.

Gotcha Cách tiếp cận này sẽ không hoạt động nếu bạn có dự án nhiều mô-đun với các gói khác nhau (tai / war / jar / zip) - thậm chí tệ hơn, các phần mềm tạo tác sai sẽ được cài đặt / triển khai! Trong trường hợp này, hãy sử dụng các tùy chọn lò phản ứng để chỉ xây dựng mô-đun có thể triển khai (ví dụ war:).


Giải trình

Trong một số trường hợp, bạn thực sự muốn chạy trực tiếp một install:installhay deploy:deploymục tiêu (có nghĩa là, từ maven-deploy-plugin, các deploymục tiêu, không phải là Maven deploy giai đoạn ) và bạn sẽ kết thúc trong sự khó chịu The packaging for this project did not assign a file to the build artifact.

Một ví dụ cổ điển là công việc CI (ví dụ: công việc Jenkins hoặc Bamboo) trong đó các bước khác nhau bạn muốn thực hiện / quan tâm đến các khía cạnh khác nhau:

  • Bước đầu tiên sẽ là mvn clean installthực hiện kiểm tra và kiểm tra phạm vi
  • Bước thứ hai sẽ là phân tích Sonarqube dựa trên hồ sơ chất lượng, ví dụ như mvn sonar:sonarcộng với các tùy chọn khác
  • Sau đó, và chỉ sau khi thực thi thử nghiệm thành công và cổng chất lượng được thông qua, bạn muốn triển khai kho lưu trữ Maven doanh nghiệp của mình các tạo tác cuối cùng của dự án, nhưng bạn không muốn chạy lại mvn deploy, vì nó sẽ thực hiện lại các giai đoạn trước đó (và biên dịch, kiểm tra , v.v.) và bạn muốn quá trình xây dựng của mình hiệu quả nhưng nhanh chóng .

Có, bạn có thể tăng tốc bước cuối cùng này ít nhất là bỏ qua các bài kiểm tra (biên dịch và thực thi, thông qua -Dmaven.test.skip=true) hoặc chơi với một cấu hình cụ thể (bỏ qua càng nhiều plugin càng tốt), nhưng việc đơn giản là chạy mvn deploy:deploysau đó sẽ dễ dàng và rõ ràng hơn nhiều .

Nhưng nó sẽ không thành công với lỗi ở trên, bởi vì như cũng được chỉ định bởi Câu hỏi thường gặp về plugin :

Trong giai đoạn đóng gói, tất cả được tập hợp và đặt trong ngữ cảnh. Với cơ chế này Maven có thể đảm bảo rằng maven-install-pluginmaven-deploy-pluginđang sao chép / tải lên cùng một tập hợp các tập tin. Vì vậy, khi bạn chỉ thực thi deploy:deploy, thì không có tệp nào được đặt trong ngữ cảnh và không có gì để triển khai.

Thật vậy, deploy:deploycần một số thông tin thời gian chạy được đặt trong bối cảnh xây dựng của các giai đoạn trước (hoặc các lần thực thi plugin / mục tiêu trước đó).

Nó cũng đã được báo cáo là một lỗi tiềm ẩn MDEPLOY-158:: deploy: deploy không hoạt động chỉ Triển khai tạo tác cho Maven Remote repo

Nhưng sau đó bị từ chối coi như không thành vấn đề.

Các deployAtEndtùy chọn cấu hình của maven-deploy-pluginsẽ không giúp không phải trong tình huống nhất định bởi vì chúng ta có các bước công việc trung gian để thực hiện:

Cho dù mọi dự án nên được triển khai trong giai đoạn triển khai của chính nó hay ở cuối quá trình xây dựng đa mô thức. Nếu được đặt thành truevà việc xây dựng không thành công, không có dự án lò phản ứng nào được triển khai. (thực nghiệm)

Vì vậy, làm thế nào để sửa chữa nó?
Chỉ cần chạy như sau trong bước thứ ba / bước cuối cùng tương tự như vậy:

mvn jar:jar deploy:deploy

Các maven-jar-pluginsẽ không tái tạo bất kỳ jar như một phần của xây dựng của bạn, nhờ nó forceCreationthiết lập tùy chọn để falsetheo mặc định:

Yêu cầu plugin jar để tạo một JAR mới ngay cả khi không có nội dung nào thay đổi. Theo mặc định, plugin này sẽ xem liệu đầu ra có tồn tại hay không và các đầu vào không thay đổi. Nếu các điều kiện này là đúng, plugin sẽ bỏ qua quá trình tạo jar.

Nhưng nó sẽ điền vào bối cảnh xây dựng một cách độc đáo cho chúng tôi và làm cho deploy:deployhạnh phúc. Không có bài kiểm tra nào để bỏ qua, không có hồ sơ để thêm. Chỉ những gì bạn cần: tốc độ.


Lưu ý thêm: nếu bạn đang sử dụng build-helper-maven-plugin, buildnumber-maven-pluginhoặc bất kỳ plugin tương tự khác để tạo ra siêu dữ liệu sau này được sử dụng bởi maven-jar-plugin(ví dụ mục cho các tập tin Manifest), bạn có lẽ hầu hết có hành liên quan đến các validategiai đoạn và bạn vẫn muốn có chúng trong suốt các jar:jarbước xây dựng (nhưng giữ một thi công nhanh). Trong trường hợp này, chi phí gần như vô hại là gọi validate pha như sau:

mvn validate jar:jar deploy:deploy

Tuy nhiên, một lưu ý bổ sung: nếu bạn chưa jarnhưng, nói, warđóng gói, sử dụng war:wartrước khi cài đặt / triển khai để thay thế.

Gotcha như đã chỉ ra ở trên, kiểm tra hành vi trong các dự án đa mô-đun.


8
Chạy vào tình huống chính xác này. Viết lên tuyệt vời - nên có trong Câu hỏi thường gặp về triển khai plugin thay vì nó khá ngắn gọn "bạn không thể làm điều đó" giải thích.
markdsievers 22/09/2016

Ai có thể nghĩ rằng jar jar có thể hữu ích sau khi tất cả;)
wearego

Xem giải pháp của tôi cho các dự án mô-đun mutli: stackoverflow.com/a/57824874/318174
Adam Gent

giải pháp này hoạt động tốt cho dự án đa mô-đun của tôi @AdamGent
karakays

Giải thích tuyệt vời. Đã mô tả chính xác kịch bản của tôi với máy chủ Jenkins của tôi.
wimnat

14

Câu trả lời này là về một câu hỏi rất cũ để giúp những người khác đối mặt với vấn đề này.

Tôi gặp lỗi không thành công này khi tôi đang làm việc với Javadự án của mình bằng IntelliJ IDEAIDE.

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

điều này không thành công xảy ra, khi tôi chọn install:installdưới Plugins - install, như được chỉ với mũi tên màu đỏ trong hình ảnh bên dưới.

Chọn lựa chọn sai

Khi tôi chạy phần được chọn installdưới đây Lifecyclenhư minh họa ở trên, sự cố đã biến mất và bản dựng biên dịch cài đặt maven của tôi thành công.


6

Tôi có cùng một vấn đề. Thông báo lỗi cho tôi là không hoàn tất. Nhưng trong trường hợp của tôi, tôi đã thêm jar thế hệ với các nguồn. Bằng cách đặt mã này trong 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>

Vì vậy, trong giai đoạn triển khai, tôi thực hiện mục tiêu source: jar tạo ra jar với các nguồn. Và triển khai kết thúc bằng XÂY DỰNG THÀNH CÔNG


2

bạn phải xóa tệp đích chẳng hạn như trong jar và các tệp khác Trong C: ổ đĩa thư mục của bạn tại .m2 xem vị trí nơi nó cài đặt và xóa tệp .jar, tệp Snaphot và xóa tệp đích sau đó xóa ứng dụng bạn thấy nó sẽ chạy


Cũng là một giải pháp từng phần.
Jasper Lankhorst

2

Lỗi này xuất hiện khi sử dụng phiên bản maven-install-plugin 3.0.0-M1 (hoặc tương tự)

Như đã đề cập ở trên và cũng ở đây, phiên bản trình cắm sau hoạt động:

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

1

Trong khi câu trả lời @ A_Di-Matteo không hoạt động cho không đa mô-đun, tôi có một giải pháp cho đa mô-đun.

Giải pháp là ghi đè mọi cấu hình plugin để nó liên kết với giai đoạn nonengoại trừ plugin jar / war / ear và tất nhiên là plugin triển khai. Ngay cả khi bạn có một mô-đun duy nhất, các thử nghiệm thô sơ của tôi cho thấy hiệu suất này nhanh hơn một chút (vì lý do tôi không biết).

Vì vậy, mẹo là tạo một cấu hình thực hiện điều trên được kích hoạt khi bạn chỉ muốn triển khai.

Dưới đây là một ví dụ từ một trong những dự án của tôi sử dụng plugin bóng râm và do đó tôi phải ghi đè lại plugin jar để không ghi đè:

    <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>

Bây giờ nếu tôi chạy mvn deploy -Pdeploynó sẽ chỉ chạy jar và triển khai các plugin.

Cách bạn có thể tìm ra plugin nào bạn cần ghi đè là chạy triển khai và xem nhật ký để xem plugin nào đang chạy. Đảm bảo theo dõi idcấu hình plugin được đặt sau tên của plugin.


0

Tôi đã gặp vấn đề tương tự nhưng tôi đã thực hiện cài đặt mvn ban đầu (không phải cài đặt: cài đặt như đã đề cập trước đó).

Giải pháp là bao gồm:

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

Vào phần quản lý plugin.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.