maven 模塊打包
1)maven 模塊打包jar文件時(shí),指定包含依賴(with-dependencies);
2)maven 模塊打包jar文件時(shí),指定入口MainClass、打包生成可執(zhí)行的jar;
vi qftools/common/src/main/java/com/xxx/qftools/common/Main.java
package com.xxx.qftools.common;
public class Main {
? ? public static void main(String args[]) {
? ? ?? ??? ?System.out.printf("Hello");
? ? }
}
vi qftools/common/pom.xml
? ...
? <build>
? ? <plugins>
? ? ? <plugin>
? ? ? ? <groupId>org.apache.maven.plugins</groupId>
? ? ? ? <artifactId>maven-install-plugin</artifactId>
? ? ? </plugin>
? ? ? <plugin>
? ? ? ? <groupId>org.apache.maven.plugins</groupId>
? ? ? ? <artifactId>maven-jar-plugin</artifactId>
? ? ? </plugin>
? ? ? <plugin>
? ? ? ? <groupId>org.codehaus.mojo</groupId>
? ? ? ? <artifactId>exec-maven-plugin</artifactId>
? ? ? </plugin>
? ? ? <!-- maven-shade-plugin: 將所有依賴包都打進(jìn)jar包中,jar命名帶后綴 shaded-with-dependency -->
? ? ? <plugin>
? ? ? ? <groupId>org.apache.maven.plugins</groupId>
? ? ? ? <artifactId>maven-shade-plugin</artifactId>
? ? ? ? <version>2.4.3</version>
? ? ? ? <executions>
? ? ? ? ? <execution>
? ? ? ? ? ? <phase>package</phase>
? ? ? ? ? ? <goals>
? ? ? ? ? ? ? <goal>shade</goal>
? ? ? ? ? ? </goals>
? ? ? ? ? ? <configuration>
? ? ? ? ? ? ? <!-- 設(shè)置將依賴整合到一個(gè)自定義名稱的 JAR 包。如果不設(shè)置此項(xiàng),
? ? ? ? ? ? ? ? 依賴將整合到 Maven 無插件時(shí)的默認(rèn) JAR 包,并生成一個(gè)前綴為 original- 的無依賴 JAR 包。
? ? ? ? ? ? ? -->
? ? ? ? ? ? ? <shadedArtifactAttached>true</shadedArtifactAttached>
? ? ? ? ? ? ? <!-- 設(shè)置生成的 JAR 包后綴名 -->
? ? ? ? ? ? ? <shadedClassifierName>shaded-with-dependencies</shadedClassifierName>
? ? ? ? ? ? ? <!-- 設(shè)置程序運(yùn)行入口 -->
? ? ? ? ? ? ? <transformers>
? ? ? ? ? ? ? ? <transformer
? ? ? ? ? ? ? ? ? ? ? ? implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
? ? ? ? ? ? ? ? ? <mainClass>com.xxx.qftools.common.Main</mainClass>
? ? ? ? ? ? ? ? </transformer>
? ? ? ? ? ? ? </transformers>
? ? ? ? ? ? </configuration>
? ? ? ? ? </execution>
? ? ? ? </executions>
? ? ? </plugin>
? ? </plugins>
? </build>
??
? 編譯打包后生成2個(gè)jar文件:
? common-1.0-SNAPSHOT-shaded-with-dependencies.jar (打包包含了所有依賴)
? common-1.0-SNAPSHOT.jar (不包含依賴)
? 執(zhí)行jar(with-dependencies的指定拉MainClass的jar,執(zhí)行時(shí)無需再指定MainClass):
? java -jar common-1.0-SNAPSHOT-shaded-with-dependencies.jar
??
? 執(zhí)行jar(未指定MainClass的jar,執(zhí)行時(shí)必須 -cp 指定MainClass):
? java -cp common-1.0-SNAPSHOT.jar com.xxx.qftools.common.Main
??
? 如果 ?java -jar 執(zhí)行 未指定MainClass的jar時(shí),會(huì)報(bào)錯(cuò)jar中沒有主清單屬性(即:jar文件中的META-INF/MANIFEST.MF文件中沒有 Main-Class: com.xxx.qftools.common.Main)
? java -jar common-1.0-SNAPSHOT.jar ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? common-1.0-SNAPSHOT.jar中沒有主清單屬性
?
另外:
java -jar common-1.0-SNAPSHOT-shaded-with-dependencies.jar
如果有依賴的lib需要加載,則執(zhí)行:
java -Xbootclasspath/a:dep.jar -jar common-1.0-SNAPSHOT-shaded-with-dependencies.jar文章來源:http://www.zghlxwxcb.cn/news/detail-629346.html
注意:-classpath 沒有用,如果執(zhí)行:java -classpath dep.jar -jar common-1.0-SNAPSHOT-shaded-with-dependencies.jar 無效。原因是使用 classpath 指定的 jar 是由 AppClassloader 來加載,java 命令加了-jar 參數(shù)之后,AppClassloader 就只關(guān)注 -jar 指定的 jar 文件范圍內(nèi)的 class 了,classpath 參數(shù)失效。
可以使用下面參數(shù)指定依賴jar的加載:
-Xbootclasspath/a: 在系統(tǒng)class加載后加載。通常用這個(gè)。
-Xbootclasspath/p: 在系統(tǒng)class加載前加載,容易和系統(tǒng)類沖突。文章來源地址http://www.zghlxwxcb.cn/news/detail-629346.html
到了這里,關(guān)于maven 模塊打包時(shí)包含依賴和打包可執(zhí)行的jar的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!