打包成可執行的jar
<!-- 可執行jar插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <!--這些配置將寫入到MANIFEST.MF文件中--> <archive> <!--指定程序入口--> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <mainClass>com.demo.test</mainClass> </manifest> <!-- (配置文件外置目錄) --> <manifestEntries> <Class-Path>config/</Class-Path> </manifestEntries> </archive> <excludes> <exclude>**/*.xml</exclude> <exclude>**/*.conf</exclude> <exclude>**/*.properties</exclude> <exclude>**/*/*.json</exclude> </excludes> </configuration> </plugin>
以上配置,生成jar包里的MANIFEST.MF文件大致內容如下:
Manifest-Version: 1.0 Archiver-Version: Plexus Archiver Built-By: Class-Path: config/ lib/ Created-By: Apache Maven 3.8.1 Build-Jdk: 1.8.0_181 Main-Class: com.demo.test
Manifest-Version:用來定義manifest文件的版本,例如:Manifest-Version: 1.0
Archiver-Version:詳見 http://codehaus-plexus.github.io/plexus-archiver/
Built-By:構建者
Class-Path:應用程序或者類裝載器使用該值來構建內部的類搜索路徑
Created-By:聲明該文件的生成者,一般該屬性是由jar命令行工具生成的,例如:Created-By: Apache Maven 3.8.1
Build-Jdk:構建的JDK版本
Main-Class:定義jar文件的入口類,該類必須是一個可執行的類,一旦定義了該屬性即可通過 java -jar x.jar來運行該jar文件
<!-- 依賴包插件 --> <plugin> <!--mvn dependency:copy-dependencies--> <artifactId>maven-dependency-plugin</artifactId> <configuration> <outputDirectory>${project.build.directory}/lib</outputDirectory> <excludeTransitive>false</excludeTransitive> <stripVersion>false</stripVersion> </configuration> </plugin>
其中:
outputDirectory:${project.build.directory}是maven變量,表示target目錄。如果不寫的話,將在根目錄下創建 target\lib 目錄;
excludeTransitive:是否不包含間接依賴的包;
stripVersion:復制的jar文件去掉版本信息;
以上配置,會將項目中所有依賴的jar,都放到指定的目錄中。
<!-- maven資源文件復制插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>2.6</version> <executions> <execution> <id>copy-config</id> <phase>package</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/config</outputDirectory> <resources> <resource> <directory>src/main/resources</directory> <includes> <exclude>**/*.xml</exclude> <exclude>**/*.conf</exclude> <exclude>**/*.properties</exclude> </includes> <filtering>true</filtering> </resource> </resources> <encoding>UTF-8</encoding> </configuration> </execution> </executions> </plugin>
以上配置,會將項目中所依賴的配置文件,都寫入到指定的路徑中。
根據以上的配置,運行相應的插件,得到的大致如下: