2012-05-04 37 views
9

我預計將提供一個jar文件的項目:如何將一個定製的jar文件註冊爲maven main artifact?

<packaging>jar</packaging> 

但罐子是建立在自定義的方式,所以默認包裝用罐子來完成:罐子已被禁用

<plugin> 
    <artifactId>maven-jar-plugin</artifactId> 
    <version>2.3.2</version> 
    <executions> 
    <execution> 
     <id>default-jar</id> 
     <phase>none</phase> 
    </execution> 
    </executions> 
</plugin> 

但然後當我想應用陰影:在現有罐子上的陰影我得到一個錯誤

項目主要工件不存在。

我認爲maven不知道我的自定義工具創建的.jar文件。如何讓它知道,因爲antrun attachArtifact不起作用

<attachartifact file="./bin/classes.jar" classifier="" type="jar"/> 

我得到的錯誤是

的螞蟻BuildException已發生:org.apache.maven.artifact.InvalidArtifactRTException:對於神器{: jar}:附加的工件必須具有與其對應的主工件不同的ID。

所以這不是註冊主神器的方法...有沒有(沒有編寫自定義java插件)?

感謝, 盧卡斯

回答

1

我檢查了JarMojo的來源和它給了我一個想法如何使用Groovy解決這個問題(通過gmaven)

<plugin> 
    <groupId>org.codehaus.gmaven</groupId> 
    <artifactId>gmaven-plugin</artifactId> 
    <version>1.3</version> 
    <executions> 
    <execution> 
     <id>set-main-artifact</id> 
     <phase>package</phase> 
     <goals> 
     <goal>execute</goal> 
     </goals> 
     <configuration> 
     <source> 
      project.artifact.setFile(new File("./bin/classes.jar")) 
     </source> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

和它的作品!:)

0

我們有同樣的問題,剛剛接到「附神器必須有不同的ID比其對應的主神器」的錯誤。我們發現以下優秀博客文章的解決方案:

http://devblog.virtage.com/2013/04/embed-and-run-ant-tasks-and-scripts-from-maven/

至於詳細in this section,您可以通過添加分類,以便Maven可以螞蟻建造的罐子和Maven的內置罐子區分解決問題。由於您使用的antrun attachartifact,你需要這樣的:

<attachartifact file="./bin/classes.jar" classifier="foo" type="jar"/> 

注意,你還需要包括分類(帶的groupId,artifactId和version一起),只要你想抓住這個瓶子作爲一個依賴在其他項目中。

1

像這樣的事情

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.8</version> 
    <executions> 
     <execution> 
      <id>attach-artifacts</id> 
      <phase>package</phase> 
      <goals> 
       <goal>attach-artifact</goal> 
      </goals> 
      <configuration> 
       <artifacts> 
        <artifact> 
         <file>${basedir}/bin/classes.jar</file> 
         <type>jar</type> 
        </artifact> 
       </artifacts> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
0

雖然您的解決方案可用於構建工作,安裝+相或存在反應器中沒有依賴關係,在情況下,只有建立在編譯或測試階段的未包裝類不會被依賴關係找到。 當使用像maven-release-plugin這樣的插件時,編譯構建會發生。

擴展您所選擇的解決方案,包括在編譯

<plugin> 
    <groupId>org.codehaus.gmaven</groupId> 
    <artifactId>gmaven-plugin</artifactId> 
    <version>1.3</version> 
    <executions> 
    <execution> 
     <id>set-main-artifact-compile</id> 
     <phase>compile</phase> 
     <goals> 
     <goal>execute</goal> 
     </goals> 
     <configuration> 
     <source> 
      project.artifact.setFile(new File("./bin/classes")) 
     </source> 
     </configuration> 
    </execution> 
    <execution> 
     <id>set-main-artifact</id> 
     <phase>package</phase> 
     <goals> 
     <goal>execute</goal> 
     </goals> 
     <configuration> 
     <source> 
      project.artifact.setFile(new File("./bin/classes.jar")) 
     </source> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

識別未包裝的類默認情況下,Maven的安裝,插件將使用鑑定神器沿 ${project.build.directory}/${project.finalname}.jar

的線,所以另一種選擇可能去這樣的事

<build> 
    <directory>bin</directory> 
    <outputDirectory>bin/classes</outputDirectory> 
    <finalName>classes</finalName> 
</build> 
相關問題