Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Maven构建:在war构建期间对jar文件进行分组_Java_Maven_Ant_Build - Fatal编程技术网

Java Maven构建:在war构建期间对jar文件进行分组

Java Maven构建:在war构建期间对jar文件进行分组,java,maven,ant,build,Java,Maven,Ant,Build,我当前的webapp包含100多个专有的javalib webapp |_WEB-INF |_lib |_ com.company.lib1.jar |_ com.company.lib2.jar 当我用maven构建我的webapp时,我想将它们重新组合在一个jar文件中,我想在webapp构建期间处理它们(而不是在旁边构建这个或其他东西) 我试图运行一个maven ant任务来重新组合lib,我得到了一个包含所有内容的jar,但我的WEB-INF/lib文件夹

我当前的webapp包含100多个专有的javalib

webapp
|_WEB-INF
   |_lib
      |_ com.company.lib1.jar
      |_ com.company.lib2.jar
当我用maven构建我的webapp时,我想将它们重新组合在一个jar文件中,我想在webapp构建期间处理它们(而不是在旁边构建这个或其他东西)

我试图运行一个maven ant任务来重新组合lib,我得到了一个包含所有内容的jar,但我的WEB-INF/lib文件夹中仍然有剩余的lib

webapp
|_WEB-INF
   |_lib
      |_ com.company.lib1.jar
      |_ com.company.lib2.jar
      |_ com.company.all_libs.jar
带有ant部分的我的pom片段:

 <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.8</version>
    <executions>
      <execution>
        <id>create-full-jar</id>
        <phase>package</phase>
        <goals>
          <goal>run</goal>
        </goals>
        <configuration>
          <target>
            <jar destfile="target/webapp/WEB-INF/lib/com.company.all_libs.jar">
              <zipgroupfileset dir="target/webapp/WEB-INF/lib" includes="*.jar" />
            </jar>
          </target>
        </configuration>
      </execution>
    </executions>
  </plugin>

org.apache.maven.plugins
maven antrun插件
1.8
创建完整的罐子
包裹
跑

我查看了maven war插件,但没有找到合适的解决方案。

我建议您制作一个子项目,使用或可能使用(首先尝试组装;shade功能更强大,但更难使用),将所有依赖项jar复制到一个mega jar中,然后你的战争就可以依靠这一点。你为什么要经历这种痛苦?War文件包含“lib”子目录中的所有JAR?根据经验,不重新打包第三方软件也是一个好主意。想想3年后,当你试图弄清楚罐子是什么以及它来自哪里的时候。更改jar意味着您不能使用sha校验和在第三方repo(如Maven Central)中搜索匹配项。最后,我不会重新打包第三方LIB。我们遇到的问题是生产服务器上打开的文件数量。我们的commons Propitary库仍然不在tomcat shared/lib文件夹中,所以我想将它们全部重新打包到一个jar中,从每个webapp打开的130个文件变成一个文件。这是我们目前运行的10个Web应用程序的两倍,大大减少了打开的文件数。我们将使用@dcsohl的答案,将所有库重新组合到一个company.bundle项目中,并且只使用对他的依赖。顺便说一下,谢谢你的回答:)
 <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.8</version>
    <executions>
      <execution>
        <id>create-full-jar</id>
        <phase>package</phase>
        <goals>
          <goal>run</goal>
        </goals>
        <configuration>
          <target>
            <jar destfile="target/webapp/WEB-INF/lib/com.company.all_libs.jar">
              <zipgroupfileset dir="target/webapp/WEB-INF/lib" includes="*.jar" />
            </jar>
          </target>
        </configuration>
      </execution>
    </executions>
  </plugin>