2014-04-29 159 views
0

我们的构建系统使用ANT进行代码编译,使用MAVEN生成编译/运行时类路径和静态预处理。我们正在逐步采用MAVEN来实现端到端的生命周期,我认为这种生命周期不会很快发生。因此,在此期间,我们决定使用MAVEN创建一个打包的工件。为此,我最终使用了maven-assembly-plugin,只是因为我可以提供从ant编译的工件创建包所需要的东西,我通过在pom中定义一个装配描述符来实现这个工件。但是,我们也想将项目的依赖关系罐放入最终的相同工件中,这是我需要一些帮助的地方。Ant编译和maven包装

我在pom.xml中创建了一个单独的配置文件,并添加了assembly.xml作为描述符。

<profile> 
     <id>assemblyjar</id> 
     <build> 
      <plugins> 
       <plugin> 
        <artifactId>maven-assembly-plugin</artifactId> 
        <version>2.4</version> 
        <configuration> 
         <appendAssemblyId>false</appendAssemblyId> 
         <descriptors> 
          <descriptor>${project.basedir}/assembly.xml</descriptor> 
         </descriptors> 
         <tarLongFileMode>gnu</tarLongFileMode> 
         <finalName>${project.artifactId}-${project.version}</finalName> 
        </configuration> 
        <executions> 
         <execution> 
          <id>make-assembly</id> 
          <phase>package</phase> 
          <goals> 
           <goal>single</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 

这里是汇编文件怎么看起来像:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"> 
<id>dist</id> 
<includeBaseDirectory>true</includeBaseDirectory> 
<formats> 
<format>jar</format> 
</formats> 
<dependencySets> 
<dependencySet> 
    <useProjectArtifact>true</useProjectArtifact> 
    <useTransitiveDependencies>true</useTransitiveDependencies> 
    <unpack>false</unpack> 
    <scope>runtime</scope> 
    <fileMode>0644</fileMode> 
    <directoryMode>0755</directoryMode> 
    <includes></includes> 
</dependencySet> 
</dependencySets> 
<fileSets> 
<fileSet> 
    <includes> 
    <include>abcd/**</include> 
    <include>efgh/**</include> 
    </includes> 
    <excludes> 
    <exclude>**/*.java</exclude> 
    <exclude>**/*.log*</exclude> 
    </excludes> 
    <directory>${project.basedir}</directory> 
</fileSet> 

当我执行装配:单-Passemblyjar,它创建与装配中提到的内容,脂肪罐子,但是它不会根据groupId & artifactId创建依赖项jar的目录。

当我其unjar神器,创建相关性JAR项目的basedir

25962 Mon Apr 28 15:46:08 PDT 2014 project-2.0.0/slf4j-api-1.6.4.jar 
159509 Mon Apr 28 15:46:08 PDT 2014 project-2.0.0/commons-io-2.0.1.jar 
43581 Mon Apr 28 15:46:10 PDT 2014 project-2.0.0/asm-3.3.1.jar 
597777 Mon Apr 28 15:46:08 PDT 2014 project-2.0.0/testng-6.3.1.jar 

下马上有没有办法让行家创建目录结构按依赖罐子的groupId和artifactId的作为如下所示。以下4个罐子就是一个例子,其中真正的罐子在不同的地方有500个。

25962 Mon Apr 28 15:46:08 PDT 2014 project-2.0.0/org/slf4j/slf4j-api/1.6.4/slf4j-api-1.6.4.jar 
159509 Mon Apr 28 15:46:08 PDT 2014 project-2.0.0/commons-io/commons-io/2.0.1/commons-io-2.0.1.jar 
43581 Mon Apr 28 15:46:10 PDT 2014 project-2.0.0/asm/asm/3.3.1/asm-3.3.1.jar 
597777 Mon Apr 28 15:46:08 PDT 2014 project-2.0.0/org/testng/testng/6.3.1/testng-6.3.1.jar 

在此感谢您的输入..

+0

如果在依赖集上设置outputFileNameMapping,会有帮助吗?我认为它默认为$ {artifact.artifactId} - $ {artifact.version}。$ {artifact.extension}。 –

+0

谢谢Niels,没有什么区别:( – user6930

回答

1

如果使用maven-dependency-plugin之前依赖复制到您的装配,您可以指定复印的目标是用库的布局,我想这是你所追求的。

然后,只需从${project.build.directory}/dependency,这是复制目标

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <version>2.8</version> 
    <executions> 
     <execution> 
     <id>copy-dependencies</id> 
     <phase>package</phase> 
     <goals> 
      <goal>copy-dependencies</goal> 
     </goals> 
     <configuration> 
      <useRepositoryLayout>true</useRepositoryLayout> 
      <overWriteReleases>false</overWriteReleases> 
      <overWriteSnapshots>false</overWriteSnapshots> 
      <overWriteIfNewer>true</overWriteIfNewer> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 
+0

感谢Niels,让我试试这个 – user6930

+0

谢谢Niels,感谢你对此的帮助..虽然它不提取groupId artifactId格式的jar,我用它来复制依赖关系到lib文件夹,它就像一个魅力.. – user6930

0

默认的输出目录汇编它作为一个文件集之后在汇编插件标签

<descriptorRefs> 
    <descriptorRef>jar-with-dependencies</descriptorRef> 
</descriptorRefs> 

最终的配置应该加入这个看起来像

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.4</version> 
    <configuration> 
    <appendAssemblyId>false</appendAssemblyId> 
    <descriptors> 
      <descriptor>${project.basedir}/assembly.xml</descriptor> 
    </descriptors> 
    <descriptorRefs> 
      <descriptorRef>jar-with-dependencies</descriptorRef> 
    </descriptorRefs> 
    <tarLongFileMode>gnu</tarLongFileMode> 
    <finalName>${project.artifactId}-${project.version}</finalName> 
    </configuration> 
    <executions> 
      <execution> 
       <id>make-assembly</id> 
       <phase>package</phase> 
       <goals> 
         <goal>single</goal> 
       </goals> 
      </execution> 
    </executions>