मावेन: इस परियोजना के लिए पैकेजिंग ने निर्मित कलाकृति के लिए एक फ़ाइल प्रदान नहीं की


113

मैं मैक 10.6.6 पर मावेन 3.0.3 का उपयोग कर रहा हूं। मेरे पास एक JAR परियोजना है और जब मैं कमांड "mvan क्लीन इनस्टॉल: इनस्टॉल" चलाता हूं, मुझे त्रुटि मिल रही है,

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

जवाबों:


168

मुझे नहीं पता कि यह उत्तर है या नहीं, लेकिन यह आपको सही दिशा में ले जा सकता है ...

कमांड install:installवास्तव में मावेन-इंस्टॉल-प्लगइन पर एक लक्ष्य है । यह installमावेन जीवन चक्र के चरण से अलग है ।

मावेन जीवनचक्र के चरण एक ऐसे निर्माण के चरण हैं जिसमें कुछ प्लगइन्स स्वयं को बांध सकते हैं। जब आप किसी एकल जीवन चक्र के चरण को शुरू करते हैं तो विभिन्न प्लगइन्स के कई अलग-अलग लक्ष्य निष्पादित हो सकते हैं।

यह क्या उबाल है आदेश है ...

mvn clean install

से अलग है...

mvn clean install:install

पूर्व स्थापित करने और स्थापित करने (संकलन, पैकेज, परीक्षण, आदि) सहित हर चक्र में सभी लक्ष्यों को चलाएगा। उत्तरार्द्ध भी आपके कोड को संकलित या पैकेज नहीं करेगा, यह सिर्फ एक लक्ष्य को चलाएगा। यह थोथा समझ में आता है, अपवाद को देखते हुए; इसके बारे में जानकारी दी है:

StarTeamCollisionUtil: इस प्रोजेक्ट के लिए पैकेजिंग ने बिल्ड आर्टवर्क के लिए फाइल असाइन नहीं की

पूर्व की कोशिश करो और आपकी त्रुटि दूर हो सकती है!


मैं बांस के माध्यम से चल रहा हूं, लेकिन मुझे कुछ भी स्थापित नहीं दिखाई देता है: किसी भी जगह को कॉन्फ़िगर में स्थापित करें
Pra_A

96

टीएल; डीआर इस मुद्दे को ठीक करने के लिए, पहले, जैसे कि jarपैकेजिंग के उपयोग के लिए पैकेजिंग प्लगइन को लागू करें maven-jar-plugin, निम्नानुसार:

mvn jar:jar install:install

या

mvn jar:jar deploy:deploy 

यदि आपको वास्तव में तैनात करने की आवश्यकता है।

गोटचा यह दृष्टिकोण काम नहीं करेगा यदि आपके पास अलग-अलग पैकगिंग्स (कान / युद्ध / जार / ज़िप) के साथ मल्टी-मॉड्यूल प्रोजेक्ट है - इससे भी बदतर, गलत कलाकृतियों को स्थापित / तैनात किया जाएगा! ऐसे मामले में रिएक्टर विकल्प का उपयोग केवल तैनाती योग्य मॉड्यूल (जैसे war) का निर्माण करने के लिए करें ।


व्याख्या

कुछ मामलों में आप वास्तव में सीधे install:installया एक deploy:deployलक्ष्य (यानी maven-deploy-plugin, deployलक्ष्य से, मावेन deploy चरण नहीं ) चलाना चाहते हैं और आप कष्टप्रद में समाप्त हो जाएंगे The packaging for this project did not assign a file to the build artifact

एक क्लासिक उदाहरण एक सीआई नौकरी (एक जेनकिंस या बांस की नौकरी, उदाहरण के लिए) है, जहां विभिन्न चरणों में आप अलग-अलग तरीकों से निष्पादन / देखभाल करना चाहते हैं:

  • एक पहला कदम होगा mvn clean install, प्रदर्शन और परीक्षण कवरेज
  • एक दूसरा चरण एक गुणवत्ता प्रोफ़ाइल के आधार पर एक सोनारक्बी विश्लेषण होगा, जैसे कि mvn sonar:sonarआगे के विकल्प
  • फिर, और केवल सफल परीक्षण निष्पादन और गुणवत्ता गेट पास होने के बाद, आप अपने मावेन एंटरप्राइज रिपॉजिटरी को अंतिम प्रोजेक्ट कलाकृतियों के लिए तैनात करना चाहते हैं, फिर भी आप फिर से चलाना नहीं चाहते हैं mvn deploy, क्योंकि यह फिर से पिछले चरणों (और संकलन, परीक्षण) को निष्पादित करेगा आदि) और आप चाहते हैं कि आपका निर्माण प्रभावी लेकिन अभी तक तेज हो

हां, आप इस अंतिम चरण को कम से कम लंघन परीक्षणों (संकलन और निष्पादन, के माध्यम से -Dmaven.test.skip=true) या किसी विशेष प्रोफ़ाइल के साथ खेल सकते हैं (जितना संभव हो उतने प्लगइन्स को छोड़ें), लेकिन यह बहुत आसान और स्पष्ट है mvn deploy:deploy

लेकिन यह, इसके बाद के संस्करण त्रुटि के साथ विफल हो जाएगा क्योंकि के रूप में भी निर्दिष्ट प्लगइन पूछे जाने वाले प्रश्न द्वारा :

पैकेजिंग-चरण के दौरान सभी एकत्र हुए और संदर्भ में रखे गए। इस तंत्र के साथ Maven सुनिश्चित कर सकते हैं कि maven-install-pluginऔर maven-deploy-pluginकॉपी कर रहे हैं / फ़ाइलें के एक ही सेट अपलोड करने। इसलिए जब आप केवल निष्पादित करते हैं deploy:deploy, तो संदर्भ में कोई फाइल नहीं डालते हैं और तैनात करने के लिए कुछ भी नहीं है।

दरअसल, deploy:deployपिछले चरण (या पिछले प्लगइन्स / लक्ष्य निष्पादित) द्वारा निर्माण के संदर्भ में कुछ रनटाइम जानकारी की आवश्यकता होती है।

यह एक संभावित बग के रूप में भी रिपोर्ट किया गया है MDEPLOY-158: परिनियोजन: केवल मावेन रिमोट रेपो के लिए तैनाती तैनाती के लिए काम नहीं करता है

लेकिन तब समस्या नहीं थी।

deployAtEndके विन्यास विकल्प maven-deploy-pluginकुछ निश्चित परिस्थितियों में न तो मदद नहीं करेगा क्योंकि हम निष्पादित करने के लिए मध्यवर्ती काम चरणों है:

चाहे हर परियोजना को अपने स्वयं के तैनाती-चरण के दौरान या मल्टीमॉडल बिल्ड के अंत में तैनात किया जाना चाहिए। यदि सेट trueऔर बिल्ड विफल हो जाता है, तो रिएक्टर परियोजनाओं में से कोई भी तैनात नहीं है। (प्रायोगिक)

तो, इसे कैसे ठीक करें?
बस इस तरह के तीसरे / अंतिम चरण में निम्नलिखित चलाएं:

mvn jar:jar deploy:deploy

maven-jar-pluginअपने निर्माण के हिस्से के रूप में किसी भी जार फिर से बनाने नहीं होगा, इसके लिए धन्यवाद forceCreationविकल्प सेट करने के लिए falseडिफ़ॉल्ट रूप से:

नया JAR बनाने के लिए जार प्लगइन की आवश्यकता होती है, भले ही कोई भी सामग्री परिवर्तित न हुई हो। डिफ़ॉल्ट रूप से, यह प्लगइन यह देखने के लिए दिखता है कि क्या आउटपुट जार मौजूद है और इनपुट नहीं बदले हैं। यदि ये स्थितियाँ सत्य हैं, तो प्लगइन जार का निर्माण छोड़ देता है।

लेकिन यह हमारे लिए निर्माण के संदर्भ को अच्छी तरह से आबाद करेगा और deploy:deployखुश करेगा। जोड़ने के लिए कोई परीक्षण नहीं, कोई प्रोफ़ाइल नहीं। बस आपको क्या चाहिए: गति।


अतिरिक्त नोट: यदि आप build-helper-maven-plugin( buildnumber-maven-pluginया maven-jar-pluginमैनिफ़ेस्ट फ़ाइल के लिए प्रविष्टियों) द्वारा उपयोग किए गए मेटा डेटा को बाद में उपयोग करने के लिए या इसी तरह के अन्य प्लगइन का उपयोग कर रहे हैं , तो आप शायद सबसे पहले validateचरण से जुड़े निष्पादन करते हैं और आप अभी भी उनके दौरान चाहते हैं jar:jarनिर्माण कदम (और अभी तक एक तेजी से निष्पादन रखने के लिए)। इस मामले में लगभग हानिरहित उपरि validate चरण के रूप में निम्न को लागू करना है :

mvn validate jar:jar deploy:deploy

फिर भी एक और अतिरिक्त ध्यान दें: यदि आपके पास इसके बजाय , स्थापित / तैनात होने से पहले पैकेजिंग, उपयोग jar, कहना नहीं है ।warwar:war

पकड़ लिया , जैसा कि ऊपर बहु मॉड्यूल परियोजनाओं में जांच व्यवहार ने कहा,।


8
इस सटीक परिदृश्य में भाग गया। शानदार लिखना - तैनाती प्लगइन में होना चाहिए अक्सर पूछे जाने वाले प्रश्न के बजाय "आप ऐसा नहीं कर सकते"।
मार्केटरशिप

किसने सोचा होगा कि जार जार सब के बाद उपयोगी हो सकता है;)
जुलाहे

म्यूटली-मॉड्यूल परियोजनाओं के लिए मेरा समाधान देखें: stackoverflow.com/a/57824874/318174
एडम जेंट

यह समाधान मेरे मल्टी-मॉड्यूल प्रोजेक्ट @AdamGent
karakays

बहुत बढ़िया स्पष्टीकरण। मेरे जेनकींस सर्वर के साथ वास्तव में मेरे परिदृश्य का वर्णन किया।
विमनट

14

यह उत्तर बहुत पुराने प्रश्न पर है, जिससे इस मुद्दे का सामना करने वाले अन्य लोगों की मदद की जा सके।

जब मैं आईडीई 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जैसा कि ऊपर दिखाया गया है, इस मुद्दे को चला, और मेरे Maven संकलन का निर्माण सफलतापूर्वक स्थापित।


6

मेरे पास एक ही मुद्दा है। मेरे लिए त्रुटि संदेश पूर्ण नहीं है। लेकिन मेरे मामले में, मैंने सूत्रों के साथ पीढ़ी के जार को जोड़ा है। इस कोड को 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>

इसलिए तैनाती के चरण में मैं स्रोत को निष्पादित करता हूं: जार लक्ष्य जो स्रोतों के साथ जार का उत्पादन करता है। और BUILD SUCCESS के साथ तैनाती समाप्त होती है


2

आपको लक्ष्य फ़ाइल को साफ़ करना चाहिए जैसे कि जार और अन्य में C: अपने फ़ोल्डर को ड्राइव करें .m2 उस स्थान को देखें जहाँ वह .jar फ़ाइल, स्नैपशॉट फ़ाइल को हटाता है और लक्ष्य फ़ाइलों को हटाता है, फिर जिस एप्लिकेशन को आपने पाया है उसे चलाएं।


खैर एक आंशिक समाधान।
जैस्पर लैंकहर्स्ट

2

यह त्रुटि मावेन-इंस्टॉल-प्लगइन संस्करण 3.0.0-M1 (या समान) का उपयोग करते समय दिखाई देती है

जैसा कि पहले ही ऊपर बताया जा चुका है और यहाँ भी निम्नलिखित प्लग-इन संस्करण काम करते हैं:

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

1

जबकि @ A_Di-Matteo उत्तर नॉन मल्टीमॉडल के लिए काम करता है मेरे पास मल्टीमॉड्यूल्स के लिए एक समाधान है।

समाधान हर प्लगइन कॉन्फ़िगरेशन को ओवरराइड करना है ताकि यह चरण के लिए बाध्य हो none जार / वार / ईयर प्लग के अपवाद के और निश्चित रूप से तैनाती प्लगइन। यहां तक ​​कि अगर आपके पास एक एकल मॉड्यूल है, तो मेरी अल्पविकसित परीक्षण इसे थोड़ा तेज़ दिखाते हैं (ऐसे कारणों के लिए जिन्हें मैं नहीं जानता) प्रदर्शन बुद्धिमान है।

इस प्रकार ट्रिक एक ऐसा प्रोफाइल बनाने के लिए है जो उपरोक्त कार्य करता है जब आप केवल तैनात करना चाहते हैं।

नीचे मेरी एक परियोजना का एक उदाहरण है जो शेड प्लगइन का उपयोग करता है और इस तरह मुझे जार प्लगइन को ओवरराइट करने के लिए फिर से ओवरराइड करना पड़ा:

    <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इसे चलाता हूं तो यह केवल जार को चलाएगा और प्लगइन्स को तैनात करेगा।

आप कैसे पता लगा सकते हैं कि आपको कौन से प्लगइन्स को ओवरराइड करने की आवश्यकता है, तैनाती को चलाने के लिए और लॉग को देखने के लिए देखें कि कौन से प्लग इन चल रहे हैं। idप्लगइन कॉन्फ़िगरेशन का ट्रैक रखना सुनिश्चित करें जो प्लगइन के नाम के बाद परेंस है।


0

मेरे पास एक ही मुद्दा था लेकिन मैंने शुरू में mvan इंस्टॉल निष्पादित किया था ( इंस्टॉल नहीं : इंस्टॉल करें जैसा कि पहले उल्लेख किया गया था)।

समाधान में शामिल है:

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

प्लगइन प्रबंधन अनुभाग में।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.