在Maven的jar中包含依赖项

有没有办法强制maven(2.0.9)将所有依赖包括在单个jar文件中?

我有一个项目构建到一个jar文件。 我希望依赖项中的类也可以复制到jar中。

更新:我知道我不能在jar文件中包含一个jar文件。 我正在寻找一种方法来解压指定为依赖项的jar包,并将类文件打包到jar中。


你可以使用带有“jar-with-dependencies”描述符的maven-assembly插件来做到这一点。 下面是我们的一个pom.xml中的相关块:

  <build>
    <plugins>
      <!-- any other plugins -->
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        </configuration>
      </plugin>
    </plugins>
  </build>

使用Maven 2,正确的方法是使用Maven2 Assembly Plugin,它具有一个预定义的描述符文件用于此目的,您可以在命令行中使用它:

mvn assembly:assembly -DdescriptorId=jar-with-dependencies

如果你想让这个jar可执行,只需将要运行的主类添加到插件配置中即可:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-assembly-plugin</artifactId>
  <configuration>
    <archive>
      <manifest>
        <mainClass>my.package.to.my.MainClass</mainClass>
      </manifest>
    </archive>
  </configuration>
</plugin>

如果要将该程序集创建为普通构建过程的一部分,则应该将单个目录或目录单一目标( assembly目标应仅从命令行运行)绑定到生命周期阶段( package有意义),类似于这个:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-assembly-plugin</artifactId>
  <executions>
    <execution>
      <id>create-my-bundle</id>
      <phase>package</phase>
      <goals>
        <goal>single</goal>
      </goals>
      <configuration>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        ...
      </configuration>
    </execution>
  </executions>
</plugin>

调整configuration元素以满足您的需求(例如,使用清单内容)。


如果你想做一个可执行的jar文件,他们也需要设置主类。 所以完整的配置应该是。

    <plugins>
            <plugin>
                 <artifactId>maven-assembly-plugin</artifactId>
                 <executions>
                     <execution>
                          <phase>package</phase>
                          <goals>
                              <goal>single</goal>
                          </goals>
                      </execution>
                  </executions>
                  <configuration>
                       <!-- ... -->
                       <archive>
                           <manifest>
                                 <mainClass>fully.qualified.MainClass</mainClass>
                           </manifest>
                       </archive>
                       <descriptorRefs>
                           <descriptorRef>jar-with-dependencies</descriptorRef>
                      </descriptorRefs>
                 </configuration>
         </plugin>
   </plugins>
链接地址: http://www.djcxy.com/p/5039.html

上一篇: Including dependencies in a jar with Maven

下一篇: Can I add jars to maven 2 build classpath without installing them?