压缩我巨大的 100MB jar 文件(spring 启动 maven 插件)
Shrink my huge 100MB jar file (spring boot maven plugin)
我想构建我的 spring 启动应用程序,但我必须将大量文件传输到不同的服务器。但是我的 "jar" 文件中的 "libs" 文件夹现在太大了。它是 100MB++。
我想要的是定期更新我的 webapp,大约 1MB 左右,并在不同服务器的输出目录中保留我的 100MB "libs" 文件夹的副本。很少更新库。
以下 POM 文件生成一个 100MB 的 JAR...,然后生成 100MB "libs" 文件夹。然后将两者拉在一起。但是我不知道如何让 100MBJAR 变小(什么 springboot libs 最重要的是一起编译?)。我想我需要一个 <include>
标签或其他东西。
但是我还没有找到配置 "spring boot maven plugin" 的正确方法,以便它只包含来自 SpringBoot 和 TomCat Embedded 的最重要的文件,但将大多数其他库保存在不同的文件夹中。
(我的底部)POM.xml
<build>
<resources>
<resource>
<directory>${project.basedir}/src/main/resources</directory>
<excludes>
<exclude>node_modules/**</exclude>
<exclude>bower_components/**</exclude>
<exclude>node/**</exclude>
</excludes>
</resource>
<resource>
<directory>${project.build.directory}/generated-resources</directory>
</resource>
</resources>
<pluginManagement>
<plugins>
<!--This plugin's configuration is used to store Eclipse m2e settings
only. It has no influence on the Maven build itself. -->
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<projectNameTemplate>[groupId].[artifactId]</projectNameTemplate>
</configuration>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/${project.build.finalName}.lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>${project.build.finalName}.lib/</classpathPrefix>
<mainClass>${fully.qualified.main.class}</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>antrun-archive</id>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<property name="final.name" value="${project.build.directory}/${project.build.finalName}"/>
<property name="archive.includes" value="${project.build.finalName}.${project.packaging} ${project.build.finalName}.lib/*"/>
<property name="tar.destfile" value="${final.name}.tar"/>
<!-- <zip basedir="${project.build.directory}" destfile="${final.name}.zip" includes="${archive.includes}" /> -->
<tar basedir="${project.build.directory}" destfile="${tar.destfile}" includes="${archive.includes}" />
<gzip src="${tar.destfile}" destfile="${tar.destfile}.gz" />
<!-- <bzip2 src="${tar.destfile}" destfile="${tar.destfile}.bz2" /> -->
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
将 "excludeGroupIds" 添加到 spring-boot-maven-plugin 和逗号分隔的 groupID 列表,并且有效。将其从核心 jar 中删除。
记住这是非标准的,不应该这样做,因为它违背了 SpringBoot 的目的(所以不妨使用 Java Spark2 框架或更现代的东西,然后配置 Tomcat separately),或者直接发送 100MB 的包。但这在这里是必要的,因为连接速度很慢。
我想构建我的 spring 启动应用程序,但我必须将大量文件传输到不同的服务器。但是我的 "jar" 文件中的 "libs" 文件夹现在太大了。它是 100MB++。
我想要的是定期更新我的 webapp,大约 1MB 左右,并在不同服务器的输出目录中保留我的 100MB "libs" 文件夹的副本。很少更新库。
以下 POM 文件生成一个 100MB 的 JAR...,然后生成 100MB "libs" 文件夹。然后将两者拉在一起。但是我不知道如何让 100MBJAR 变小(什么 springboot libs 最重要的是一起编译?)。我想我需要一个 <include>
标签或其他东西。
但是我还没有找到配置 "spring boot maven plugin" 的正确方法,以便它只包含来自 SpringBoot 和 TomCat Embedded 的最重要的文件,但将大多数其他库保存在不同的文件夹中。
(我的底部)POM.xml
<build>
<resources>
<resource>
<directory>${project.basedir}/src/main/resources</directory>
<excludes>
<exclude>node_modules/**</exclude>
<exclude>bower_components/**</exclude>
<exclude>node/**</exclude>
</excludes>
</resource>
<resource>
<directory>${project.build.directory}/generated-resources</directory>
</resource>
</resources>
<pluginManagement>
<plugins>
<!--This plugin's configuration is used to store Eclipse m2e settings
only. It has no influence on the Maven build itself. -->
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<projectNameTemplate>[groupId].[artifactId]</projectNameTemplate>
</configuration>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/${project.build.finalName}.lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>${project.build.finalName}.lib/</classpathPrefix>
<mainClass>${fully.qualified.main.class}</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>antrun-archive</id>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<property name="final.name" value="${project.build.directory}/${project.build.finalName}"/>
<property name="archive.includes" value="${project.build.finalName}.${project.packaging} ${project.build.finalName}.lib/*"/>
<property name="tar.destfile" value="${final.name}.tar"/>
<!-- <zip basedir="${project.build.directory}" destfile="${final.name}.zip" includes="${archive.includes}" /> -->
<tar basedir="${project.build.directory}" destfile="${tar.destfile}" includes="${archive.includes}" />
<gzip src="${tar.destfile}" destfile="${tar.destfile}.gz" />
<!-- <bzip2 src="${tar.destfile}" destfile="${tar.destfile}.bz2" /> -->
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
将 "excludeGroupIds" 添加到 spring-boot-maven-plugin 和逗号分隔的 groupID 列表,并且有效。将其从核心 jar 中删除。
记住这是非标准的,不应该这样做,因为它违背了 SpringBoot 的目的(所以不妨使用 Java Spark2 框架或更现代的东西,然后配置 Tomcat separately),或者直接发送 100MB 的包。但这在这里是必要的,因为连接速度很慢。