2012-11-25 36 views
2

我使用一個描述符建立一個裝配在Maven和我想簡單地做到以下幾點:重命名所有項目的依賴關係而不重命名主神器

  1. ,包括主要的項目工件(JAR)沒有任何重命名。
  2. 包含所有項目依賴關係,並對它們進行重命名。

重命名格式:

${project.artifactId}-${project.version}.lib.${artifact.artifactId}.${artifact.extension}` 

目前,我的裝配描述是這樣的:

<?xml version="1.0"?> 
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> 

    <id>default</id> 

    <formats> 
     <format>tar.gz</format> 
     <format>zip</format> 
    </formats> 

    <dependencySets> 
     <dependencySet> 
      <useProjectArtifact>true</useProjectArtifact> 
      <outputDirectory>/</outputDirectory> 
      <excludes> 
       <exclude>*:*</exclude> 
      </excludes> 
     </dependencySet> 
     <dependencySet> 
      <useProjectArtifact>false</useProjectArtifact> 
      <outputDirectory>/</outputDirectory> 
      <outputFileNameMapping> 
       ${project.artifactId}-${project.version}.lib.${artifact.artifactId}.${artifact.extension} 
      </outputFileNameMapping> 
      <unpack>false</unpack> 
     </dependencySet> 
    </dependencySets> 
</assembly> 

不幸的是,我似乎無法讓主項目構件在分配土地。我究竟做錯了什麼?

+1

我想它與你的''模式有關。嘗試將其刪除,看看您的項目工件是否應該放在應有的位置。如果是的話,你必須以某種方式修改該模式(也許使用''代替)。 –

+0

我似乎記得,如果你用'-X'運行mvn,程序集插件調試輸出應該告訴你它與每個dependencySet匹配的是什麼。我同意安德魯,我會嘗試使用'includes'而不是'excludes',看看是否有幫助。 – user944849

回答

2

可以使用<files>塊包含項目工件本身分開:

<!-- Include the project artifact itself. --> 
<files> 
    <file> 
     <source>${project.build.directory}/${project.build.finalName}.${project.packaging}</source> 
     <outputDirectory>/</outputDirectory> 
    </file> 
</files> 

<!-- Include all dependent libraries. --> 
<dependencySets> 
    <dependencySet> 
     <useProjectArtifact>false</useProjectArtifact> 
     <outputDirectory>/</outputDirectory> 
     <outputFileNameMapping>${project.artifactId}-${project.version}.lib.${artifact.artifactId}.${artifact.extension}</outputFileNameMapping> 
     <unpack>false</unpack> 
    </dependencySet> 
</dependencySets> 

(對於<source>有可能是一個更正確的表達比上面的一個,但要找到可用的Maven特性的完整列表如果有人知道它,請隨時編輯!)

最後,順便說一句,如果您的任何依賴項有分類器,您可能需要考慮在某處添加${dashClassifier?}<outputFileNameMapping>,否則分類器將會丟失從文件名。

+0

這不是最好的解決方案,但事實上,它確實有效。 –