2014-09-11 51 views
1

我试图使用Assembly插件包括依赖条件以及Maven的组装插件,包括广口瓶的依赖和外部文件

这里是我的组装插件

<plugin> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <version>2.4.1</version> 
       <executions> 
        <execution> 
         <id>create-executable-jar</id> 
         <phase>package</phase> 
         <goals> 
          <goal>single</goal> 
         </goals> 

        </execution> 
       </executions> 

       <configuration> 
          <descriptorRefs> 
           <descriptorRef> 
            jar-with-dependencies 
           </descriptorRef> 
            </descriptorRefs> 
            <descriptors> 
             <descriptor>src/assembly/assembly.xml</descriptor> 
            </descriptors> 
          <archive> 
           <manifest> 
            <mainClass>com.sarm.myproject.XMLParser.LPUnMarshaller</mainClass> 
           </manifest> 
          </archive> 
         </configuration> 

      </plugin> 

这里是我的assembly.xml描述符,我使id与descritpor ref相同,因为它为这个描述符创建了一个不同的jar。所以我有两个描述符,一个是jar-with-dependencies描述符ref,另一个是下面的描述符,在这种情况下发生的是它创建两个jar,第二个jar覆盖前一个jar。如何将这两个包含在同一个罐子里?

<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>jar-with-dependencies</id> 
    <formats> 
    <format>jar</format> 
    </formats> 


    <fileSets> 
    <fileSet> 
     <directory>${basedir}</directory> 
     <includes> 
     <include>*.xml</include> 
     </includes> 

    <excludes> 
     <exclude>30000dests.xml</exclude> 

     </excludes> 

    </fileSet> 
    <fileSet> 
     <directory>${basedir}/test</directory> 
     <includes> 
     <include>*.xml</include> 
     </includes> 

    </fileSet> 
    </fileSets> 
</assembly> 

编辑:我已经尝试了一些其他办法,我已经看到,如果我用assembly.xml作为一个描述符,一个新的jar沿侧创建创建以及任何其他默认罐子。所以我最终得到两个罐子。默认的jar是一个像jar插件配置的可执行文件。即使程序集插件被配置为使用我的主类名称来创建manifest.mf,但通过assmbly.xml创建的jar不可执行,并且其中包含可执行jar的我的项目名称的文件夹。

我使用mvn clean install来构建我的项目和jar文件。

回答

0

您应该创建两个产生两个罐子的模块。通常,Maven将为每个模块生成一个jar文件,并将模块名称作为jar名称。 Maven建议每个模块都有一个输出工件。

如果您担心重复代码。你可以通过拥有一个父pom来继承相关的东西。

+0

感谢您的回复。这个想法是只有一个罐子。依赖和外部文件。两个罐子,一个有libs,一个只有外部,第二个没有上课,他们不会真的帮助我很多。我只会运行jar。此外,罐子以爆炸形式出现。如果我用依赖集合使用assembly.xml那么我可以有罐子,但是我错过了代码。为什么编译后的类不能与使用assembly.xml创建的jar打包在一起。我非常喜欢使用assembly.xml的想法,它非常灵活。 – sarmahdi 2014-09-12 14:34:09