2017-04-23 115 views
0

我想构建我的spring启动应用程序,但我必须将文件转移到不同的服务器。但是我的“jar”文件中的“libs”文件夹现在太大了。它是100MB ++。收缩我的巨大的100MB jar文件(spring boot maven插件)

我想要的是定期更新我的webapp,就像1MB或其他东西,并保存在不同服务器的输出目录上的100MB“libs”文件夹的副本。只是很少更新库。

下面的POM文件会生成一个100MB的JAR文件...然后生成100MB的“libs”文件夹。然后将两者拉到一起。但我不知道如何使100MBJAR变小(哪一个弹簧引导库最重要一起编译?)。我想我需要一个<include>标签或其他东西。

但我还没有找到合适的方式来配置“春天启动Maven插件”,使其只包括SpringBoot & Tomcat的嵌入式最重要的文件,但保留最外面的其他库在不同的文件夹。

的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> 
+0

请参阅https://github.com/dsyer/spring-boot-thin-launcher –

+0

我宁愿寻找使用rsync和/或创建二进制增量文件,因为你正在对抗基本思想Spring Boot - 拥有一个自给自足的JAR文件。另一个选择是将独立的Tomcat服务器与Spring MVC应用程序一起使用,并将一些依赖项标记为“运行时”,以告诉Maven不要将它们包含在JAR文件中。 –

回答

0

增加了“excludeGroupIds”(我的底部)到春季启动 - Maven的插件和组ID的逗号分隔的列表,和它的工作。将它从核心瓶中取出。

请记住这是非标准的,不应该由于它违背了SpringBoot的目的(因此不妨使用Java Spark2 Framework或更现代的东西,然后分别配置Tomcat),或者仅仅发送超过100MB的软件包。但由于连接速度缓慢,因此这是必要的。