maven程序集插件,包括jar依赖项和外部文件

时间:2014-09-11 04:31:24

标签: java maven jar

我正在尝试使用Assembly插件来包含dependecies以及

这是我的程序集插件

<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是一个可执行文件,就像配置了jar插件一样。即使程序集插件配置为带有我的主类名的manifest.mf,通过assmbly.xml创建的jar也不可执行,并且有一个我的项目名称的文件夹,里面有可执行jar。

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

1 个答案:

答案 0 :(得分:0)

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

如果您担心重复代码。您可以通过父pom继承相关的东西。