spring boot 在打包運行jar的時候,默認會把依賴jar所有打包到一個jar中,這樣有一個不方便的地方,就是打包的jar包比較大,每次上傳到服務器都要上傳很久,這裏咱們能夠使用assembly插件將依賴jar打包到外部獨立文件夾中,之後每次只須要上傳不包含依賴jar的包就能夠了,這樣打出來的jar也能夠運行spring
在pom中添加如下插件:apache
<build> <!-- <finalName>fileName</finalName>--> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <!-- 項目啓動類,這裏須要替換成啓動類 --> <mainClass>com.bc.Application</mainClass> <!-- 依賴的jar的目錄前綴 --> <classpathPrefix>../lib</classpathPrefix> <addClasspath>true</addClasspath> </manifest> </archive> <excludes> <exclude>assembly.xml</exclude> <exclude>application.properties</exclude> <exclude>application.yml</exclude> </excludes> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <configuration> <appendAssemblyId>true</appendAssemblyId> <descriptors> <descriptor>src/main/resources/assembly.xml</descriptor> </descriptors> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
對應的assembly.xml配置文件:服務器
<?xml version="1.0" encoding="UTF-8"?> <assembly> <!-- 可自定義--> <id>assembly-${project.version}</id> <!-- 打包的類型,若是有N個,將會打N個類型的包 --> <formats> <format>zip</format> <!-- <format>tar.gz</format> --> </formats> <includeBaseDirectory>true</includeBaseDirectory> <!-- 將依賴jar打包到lib文件夾中 --> <dependencySets> <dependencySet> <outputDirectory>lib</outputDirectory> <scope>runtime</scope> <excludes> <exclude>${groupId}:${artifactId}</exclude> </excludes> </dependencySet> </dependencySets> <fileSets> <!-- 0755->即用戶具備讀/寫/執行權限,組用戶和其它用戶具備讀寫權限; 0644->即用戶具備讀寫權限,組用戶和其它用戶具備只讀權限; --> <!-- 將src/bin目錄下的全部文件輸出到打包後的bin目錄中 --> <fileSet> <directory>${basedir}/bin</directory> <outputDirectory>bin</outputDirectory> <fileMode>0755</fileMode> <includes> <include>**.sh</include> <include>**.bat</include> </includes> </fileSet> <!-- 指定輸出target/classes中的配置文件到config目錄中 --> <fileSet> <directory>${basedir}/target/classes</directory> <outputDirectory>bin</outputDirectory> <fileMode>0644</fileMode> <includes> <include>application.properties</include> <include>application.yml</include> </includes> </fileSet> <!-- 將第三方依賴打包到lib目錄中 --> <fileSet> <directory>${basedir}/target/lib</directory> <outputDirectory>lib</outputDirectory> <fileMode>0755</fileMode> </fileSet> <!-- 將項目啓動jar打包到bin目錄中 --> <fileSet> <directory>${basedir}/target</directory> <outputDirectory>bin</outputDirectory> <fileMode>0755</fileMode> <includes> <include>${project.build.finalName}.jar</include> </includes> </fileSet> <!-- 包含根目錄下的文件 --> <fileSet> <directory>${basedir}</directory> <includes> <include>NOTICE</include> <include>LICENSE</include> <include>*.md</include> </includes> </fileSet> </fileSets> </assembly>
執行mvn package就能夠生成壓縮文件,運行的jar在bin目錄下,解壓出來能夠直接運行app
還一種將依賴jar複製到外部目錄的方式,使用maven-dependency-plugin插件maven
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <configuration> <outputDirectory>${project.build.directory}/lib</outputDirectory> <excludeTransitive>false</excludeTransitive> <stripVersion>false</stripVersion> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> </execution> </executions> </plugin>
將assembly.xml文件中的dependencySets節點註釋掉,這樣也能夠複製依賴jar到lib文件夾中ui