注意,如果是依賴了本地公用項目,需要將本地公用項目通過mvn install安裝到本地maven倉庫;(用java8執行mvn命令)
將項目依賴的jar包外置到主jar包所在目錄的lib目錄,resources文件外置到主jar包所在目錄的配置:
<build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.6</version> <configuration> <archive> <!-- 配置打包后jar包內的元數據,比如classpath是什么【從哪里找依賴】 --> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <mainClass>me.silentdoer.demomybladetest.Entrance</mainClass>
<useUniqueVersions>false</useUniqueVersions> </manifest> <manifestEntries> <Class-Path>./</Class-Path> </manifestEntries> </archive> <excludes> <exclude> <!-- 排除文件的寫法 --> <exclude>**/*.xml</exclude> <!-- 排除resources內的某個目錄打包到項目jar包內 --> <exclude>/config/**</exclude> </exclude> </excludes> </configuration> <executions> <execution> <phase>compile</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>2.7</version> <dependencies> <dependency> <groupId>org.apache.maven.shared</groupId> <artifactId>maven-filtering</artifactId> <version>1.3</version> </dependency> </dependencies> <executions> <execution> <!-- 如果不行這個換成copy-config試試 --> <id>copy-resources</id> <phase>package</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <!-- 將resources的內容復制到target目錄里 --> <outputDirectory>${project.build.directory}/</outputDirectory> <resources> <resource> <directory>src/main/resources</directory> </resource> </resources> <encoding>UTF-8</encoding> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>2.8</version> <executions> <!-- 這里是否可以增加多個execution和通過include等來實現將部分依賴直接壓縮到主jar包內? --> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <!-- 將依賴復制到target目錄下的lib目錄里 --> <outputDirectory>${project.build.directory}/lib</outputDirectory> <!-- 要包含間接依賴 --> <excludeTransitive>false</excludeTransitive> <!-- 不忽略版本 --> <stripVersion>false</stripVersion> </configuration> </execution> </executions> </plugin> <!-- 這個是可以生成一個zip包或war包,而且它是后於jar包生成,所以可以引用target的文件 --> <!-- 如果不需要生成zip包或war包等,只需要jar包則上面的配置就夠了,這個可以注釋掉 --> <!-- 注意,這里依賴了一個package.xml文件,這個文件一般放在項目/module根目錄里 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.4</version> <configuration> <!-- 如果是true則壓縮包名字最后面會加package.xml里的id值 --> <appendAssemblyId>false</appendAssemblyId> <descriptors> <descriptor>package.xml</descriptor> </descriptors> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.18.1</version> <configuration> <skipTests>true</skipTests> </configuration> </plugin> </plugins> </build>
這個是module項目根目錄下的package.xml文件的配置,里面的內容可以根據自己實際情況修改:
<assembly> <id>distribution</id> <formats> <!-- 這里填zip,war。。等等包類型,war包會自動在壓縮文件根目錄添加以META-INF目錄 --> <format>zip</format> </formats> <!-- true表示壓縮包內部會用一個和壓縮包前綴名一樣的目錄包裹需要壓縮的文件,目錄等,false則 打開壓縮包就能直接看到outputDirectory配置的目錄、文件--> <includeBaseDirectory>false</includeBaseDirectory> <fileSets> <fileSet> <!-- 將directory里的文件壓縮到壓縮包文件里的outputDirectory目錄里--> <directory>src/main/resources</directory> <outputDirectory>/sk</outputDirectory> <includes> <!-- 注意這里必須手動指定需要directory里的哪些文件壓縮到壓縮包的outputDirectory里 如果是全部文件則**/*來配置 --> <include>**/system*</include> </includes> </fileSet> <!-- 還可以包含target目錄里的文件,因為assembly這個maven插件是要比jar插件更晚執行 ,此時target及內部文件已經生成 --> <fileSet> <directory>target</directory> <!-- 表示直接將include添加的文件或目錄輸出到壓縮包的相對根路徑里 --> <outputDirectory>/</outputDirectory> <includes> <include>*.jar</include> </includes> </fileSet> </fileSets> </assembly>
上面打包用的是java8,如果出現問題,那么可能是mvn命令依賴的jdk版本問題。
