2012-11-25 35 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

这不是最好的解决方案,但事实上,它确实有效。 –