springboot-33-使用maven打瘦包


直接使用maven的插件打包的話, 打出來一個jar, 會非常大, 有時候在服務上傳的時候會非常不方便,

<plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <!-- 指定SpringBoot程序的main函數入口類 -->
                    <mainClass>com.letv.bigdata.idfa.Main</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

因此需要打出來的jar包不帶以來, 依賴防止在lib目錄下, 配置文件放在config目錄下

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.letv.bigdata.idfa.Main</mainClass>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>../libs/</classpathPrefix>
                        </manifest>
                        <manifestEntries>
                            <!--<Class-Path>./</Class-Path>-->
                            <Class-Path>../config</Class-Path>
                        </manifestEntries>
                    </archive>
                    <excludes>
                        <exclude>application*.yml</exclude> //指定打包時要排除的文件,支持正則
                    </excludes>
                </configuration>
            </plugin>

            <!--拷貝依賴jar到指定的目錄-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <!--<version>2.2</version>-->
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.basedir}/libs</outputDirectory>
                            <overWriteReleases>false</overWriteReleases>
                            <overWriteSnapshots>false</overWriteSnapshots>
                            <overWriteIfNewer>true</overWriteIfNewer>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.2.1</version>
                <configuration>
                    <descriptors>
                        <descriptor>${project.basedir}/assembly.xml</descriptor>
                    </descriptors>
                </configuration>
                <executions>
                    <execution>
                        <id>make-package</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

使用的assembly放在項目根目錄下, 和src一個級別

aseembly.xml

<?xml version="1.0" encoding="UTF-8"?>
<assembly>
    <!-- 最終生成的包名稱為artifactId-version-id.format,
            id主要用來區分包是由哪個assembly文件生成的,本例中
            artifactId:test
            version:1.0.0
            id:bin
            format:tar.gz
            最終將會在target文件夾下生成一個名為test-1.0.0-bin.tar.gz的包 -->
    <id>bin</id>
    <!-- zip, tar, tar.gz, tar.bz2, jar, dir, war 也是支持的  -->
    <formats>
        <!-- 可以同時打多種格式的包  -->
        <format>tar.gz</format>
        <!-- <format>zip</format> -->
    </formats>
    <!--  默認值是true,此時將創建一個名為artifactId-version的根文件夾,
            所有outputDirectory標簽指定的路徑將變為相對於該文件夾的路徑。
            例如:outputDirectoryS的值為/test,則最終徑為/artifactId-version/test
            如果includeBaseDirectory的值是false,則最終路徑為/test  -->
    <includeBaseDirectory>true</includeBaseDirectory>

    <dependencySets>
        <dependencySet>
            <!--  true是默認值,本次構建出來的jar包屬於當前這個dependencySet,
                    此時jar包將會被添加至新的tar.gz包中  -->
            <useProjectArtifact>true</useProjectArtifact>
            <outputDirectory>/libs</outputDirectory>
            <unpack>false</unpack>
        </dependencySet>
    </dependencySets>

    <fileSets>
        <!-- 如果存在fileSet標簽,並且在標簽中沒有使用includes標簽指定打入包中的文件,
                默認情況下,工程中的所有文件(源文件、編譯后產生的.class文件、配置文件等)
                都會被打入包中  -->
        <fileSet>
            <directory>${project.basedir}/src/main/resources</directory>
            <outputDirectory>/config</outputDirectory>
            <includes>
                <include>**/*.*</include>
            </includes>
        </fileSet>
        <!--
        <fileSet>
            <directory>${project.basedir}/dic</directory>
            <outputDirectory>/dic</outputDirectory>
            <includes>
                <include>*</include>
            </includes>
        </fileSet>
        -->
        <fileSet>
            <directory>${project.basedir}/script</directory>
            <outputDirectory>/bin</outputDirectory>
            <includes>
                <include>*</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>${project.basedir}/logs</directory>
            <outputDirectory>/logs</outputDirectory>
            <includes>
                <include>*</include>
            </includes>
        </fileSet>

    </fileSets>


</assembly>

 

 

 

這樣打出來的是tar.gz包, 執行腳本放在bin目錄下(http://www.cnblogs.com/wenbronk/p/9021542.html), conf目錄下放application.yml文件等, lib目錄下放所有的jar包

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM