一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Maven 生成打包可執行jar包的方法步驟

Maven 生成打包可執行jar包的方法步驟

2020-09-05 00:03荒野雄兵 Java教程

這篇文章主要介紹了Maven 生成打包可執行jar包的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

最近IDEA打可執行Jar包搞了三天,一直失敗,好好學習一下Maven-assembly,在此記錄一下

1. 需求

項目打包,滿足以下要求:

1.整個項目打一個Zip包下面包括應用程序、應用程序依賴的jar包、說明文檔
2.項目打的jar包可以執行不同類里的Main函數
3.項目源碼打的jar包要與依賴的第三方jar包分開
4.項目里的執行腳本也要一塊打包并進行分類
5.document目錄下的readme.txt放在壓縮包的根目錄下,其他的還放在這個目錄下
6.打的jar包去掉不需要的目錄(文件)

2. 開發環境

IDEA-2016 Maven3.3.9

項目的目錄結構:

Maven 生成打包可執行jar包的方法步驟

3. Maven打包插件介紹

assembly翻譯過來就是組裝、裝配的意思
Maven對項目打包常用的打包插件有三種,分別是:

 

插件 功能
maven-jar-plugin maven 默認打包插件,用來創建 project jar
maven-shade-plugin 打可執行包,executable(fat) jar
maven-assembly-plugin 支持自定義打包方式

 

這里使用maven-jar-plugin和maven-assembly-plugin
項目目錄:

每次找jar包之前先clean一下,不然的話IDEA會認為你的項目沒有修改而不重新加載

另:配置文件的注釋已經很詳細了,這里就不另外再說明了

4. Maven使用maven-jar-plugin打可執行jar包

主要配置如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  <version>2.4</version>
  <!-- 對要打的jar包進行配置 -->
  <configuration>
    <!-- Configuration of the archiver -->
    <archive>
      <!--生成的jar中,不要包含pom.xml和pom.properties這兩個文件-->
      <addMavenDescriptor>false</addMavenDescriptor>
 
      <!-- Manifest specific configuration -->
      <manifest>
        <!--是否要把第三方jar放到manifest的classpath中-->
        <addClasspath>true</addClasspath>
        
        <!--生成的manifest中classpath的前綴,
        因為要把第三方jar放到lib目錄下,
        所以classpath的前綴是lib/-->
        <classpathPrefix>lib/</classpathPrefix>
      </manifest>
    </archive>
    <!--過濾掉不希望包含在jar中的文件-->
    <excludes>
      <!-- 排除不需要的文件夾(路徑是jar包內部的路徑) -->
      <exclude>**/assembly/</exclude>
    </excludes>
  </configuration>
</plugin>

完整配置見底部

5. Maven使用maven-assembly-plugin裝需要打包的文件打進zip包

pom.xml下的主要配置如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-assembly-plugin</artifactId>
  <version>2.4</version>
  <!-- 對項目的組裝進行配置 -->
  <configuration>
    <!-- 指定assembly插件的配置文件所在位置 -->
    <descriptors>
      <descriptor>src/main/resources/assembly/package.xml</descriptor>
    </descriptors>
  </configuration>
  <executions>
    <execution>
      <id>make-assembly</id>
      <!-- 將組裝綁定到maven生命周期的哪一階段 -->
      <phase>package</phase>
      <goals>
        <!-- 指定assembly插件的打包方式-->
        <goal>single</goal>
      </goals>
    </execution>
  </executions>
</plugin>

assembly插件的配置文件package.xml見底部

6. Maven生成可執行jar包及zip項目壓縮包

雙擊執行mvn:package會生成兩個包:可執行jar包和項目壓縮包,因為assembly的裝配配置的是綁定到這上面來的
雙擊執行assembly:single只生成項目壓縮包

Maven 生成打包可執行jar包的方法步驟

這里執行mvn:package

Maven 生成打包可執行jar包的方法步驟

解壓后的項目壓縮包目錄結構:

Maven 生成打包可執行jar包的方法步驟

7. 執行jar包

解壓縮生成的項目包
TestString的源碼:

?
1
2
3
4
5
6
public class TestString {
  public static void main(String[] args) {
    String[] arr = new String[]{"aaa", "bbb", "ccc", "DDD", "EEE", "FFF"};
    System.out.println(StringUtils.join(arr, "---"));
  }
}

TestNumber的源碼:

?
1
2
3
4
5
6
public class TestNumber {
  public static void main(String[] args) {
    Integer[] arr = new Integer[]{11, 22, 33, 44, 55, 66};
    System.out.println(StringUtils.join(arr, "---"));
  }
}

命令行運行生成的jar

?
1
2
java -classpath dong.jar com.dong.bigdata.TestString
java -classpath dong.jar com.dong.bigdata.TestNumber

運行結果:

Maven 生成打包可執行jar包的方法步驟

8. pom.xml配置

包含兩個文件:
pom.xml整體的配置
package.xml包含在pom.xml中,用于指定assembly裝配時的配置

pom.xml文件:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <!-- ####################### 基礎設置 ###################### -->
  <!--groupId:項目或者組織的唯一標志,并且配置時生成路徑也是由此生成,如org.myproject.mojo生成的相對路徑為:/org/myproject/mojo-->
  <groupId>com.dong</groupId>
  <!--項目的通用名稱-->
  <artifactId>bigdata</artifactId>
  <!--打包機制,如pom,jar,maven-plugin,ejb,war,ear,rar,par-->
  <packaging>jar</packaging>
  <!--項目的版本-->
  <version>1.0-SNAPSHOT</version>
 
  <!-- ####################### 項目信息 ###################### -->
  <!--用戶描述項目的名稱,無關緊要的東西-->
  <name>bigdata</name>
  <!--寫明開發團隊的網站,無關緊要-->
  <url>http://http://www.dong.com/.com</url>
 
  <!-- ####################### 環境設置 ###################### -->
  <properties>
    <!-- 項目執行腳本目錄 -->
    <project.script.execute.directory>src/main/scripts/execute</project.script.execute.directory>
    <!-- 項目說明文檔目錄 -->
    <project.document.directory>document</project.document.directory>
    <!-- 項目配置文件目錄 -->
    <project.config.directory>src/main/resources</project.config.directory>
    <!-- 項目編碼 -->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 
    <!-- 本地編譯JDK版本 -->
    <maven.compiler.source>1.8</maven.compiler.source>
    <!-- 項目部署JDK版本 -->
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
 
  <!--
   配置Maven的倉庫, 在此處配置的倉庫會優先于setting.xml里配置的倉庫,
   建議哪個倉庫快,哪個配置在前面, 然后如果Maven在前面配置的倉庫找不到的話會去后面的倉庫找,
   如果后面的倉庫都找不到,會去setting.xml中央倉庫里找
   -->
  <repositories>
    <!-- 阿里云倉庫,配置Maven倉庫,速度快配置在最前面 -->
    <repository>
      <id>aliyun</id>
      <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </repository>
    <!-- 國內備選倉庫 -->
    <repository>
      <id>repo2</id>
      <url>http://repo2.maven.org/maven2/</url>
    </repository>
 
    <!-- Cloudera倉庫,如果在阿里云倉庫里找不到去Cloudera的倉庫里找,主要是CDH版本Hadoop依賴的jar -->
    <repository>
      <id>cloudera</id>
      <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
    </repository>
 
    <!-- Scala倉庫,如果前面兩個都找不到來倉庫找,如果此倉庫也找不到,去中央倉庫找 -->
    <repository>
      <id>scala-tools.org</id>
      <name>Scala-Tools Maven2 Repository</name>
      <url>http://scala-tools.org/repo-releases</url>
    </repository>
  </repositories>
 
  <dependencies>
    <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.4</version>
    </dependency>
  </dependencies>
 
  <build>
    <finalName>dong</finalName>
    <plugins>
      <!-- The configuration of maven-jar-plugin -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.4</version>
        <!-- 對要打的jar包進行配置 -->
        <configuration>
          <!-- Configuration of the archiver -->
          <archive>
            <!--生成的jar中,不要包含pom.xml和pom.properties這兩個文件-->
            <addMavenDescriptor>false</addMavenDescriptor>
 
            <!-- Manifest specific configuration -->
            <manifest>
              <!--是否要把第三方jar放到manifest的classpath中-->
              <addClasspath>true</addClasspath>
 
              <!--
              生成的manifest中classpath的前綴,
              因為要把第三方jar放到lib目錄下,
              所以classpath的前綴是lib/
              -->
              <classpathPrefix>lib/</classpathPrefix>
            </manifest>
          </archive>
          <!--過濾掉不希望包含在jar中的文件-->
          <excludes>
            <!-- 排除不需要的文件夾(路徑是jar包內部的路徑) -->
            <exclude>**/assembly/</exclude>
          </excludes>
        </configuration>
      </plugin>
 
      <!-- The configuration of maven-assembly-plugin -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.4</version>
        <!-- 對項目的組裝進行配置 -->
        <configuration>
          <!-- 指定assembly插件的配置文件所在位置 -->
          <descriptors>
            <descriptor>src/main/resources/assembly/package.xml</descriptor>
          </descriptors>
        </configuration>
        <executions>
          <execution>
            <id>make-assembly</id>
            <!-- 將組裝綁定到maven生命周期的哪一階段 -->
            <!--<phase>package</phase>-->
            <goals>
              <!-- 指定assembly插件的打包方式-->
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

9. package.xml文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<?xml version="1.0" encoding="UTF-8"?>
<assembly>
  <id>full</id>
  <!-- 最終打包成一個用于發布的zip文件 -->
  <formats>
    <format>zip</format>
  </formats>
 
  <!-- 把依賴jar包打包進Zip壓縮文件的lib目錄下 -->
  <dependencySets>
    <dependencySet>
      <!--不使用項目的artifact,第三方jar不要解壓,打包進zip文件的lib目錄-->
      <useProjectArtifact>false</useProjectArtifact>
 
      <!-- 第三方jar打包進Zip文件的lib目錄下, -->
      <!-- 注意此目錄要與maven-jar-plugin中classpathPrefix指定的目錄相同, -->
      <!-- 不然這些依賴的jar包加載到ClassPath的時候會找不到-->
      <outputDirectory>lib</outputDirectory>
 
      <!-- 第三方jar不要解壓-->
      <!--<unpack>false</unpack>-->
    </dependencySet>
  </dependencySets>
 
  <!-- 文件設置,你想把哪些文件包含進去,或者把某些文件排除掉,都是在這里配置-->
  <fileSets>
    <!-- 把項目自己編譯出來的可執行jar,打包進zip文件的根目錄 -->
    <fileSet>
      <directory>${project.build.directory}</directory>
      <outputDirectory></outputDirectory>
      <includes>
        <include>*.jar</include>
      </includes>
    </fileSet>
 
    <!--
    把項目readme說明文檔,打包進zip文件根目錄下
    (這里針對目錄document/readme.txt文件)
    ${projet.document.directory}是pom.xml中自己配置的
     -->
    <fileSet>
      <directoryl>${projet.document.directory}</directoryl>
      <outputDirectory></outputDirectory>
      <includes>
        <include>readme.*</include>
      </includes>
    </fileSet>
 
    <!--
    把項目相關的說明文檔(除了readme文檔),
    打包進zip文件根目錄下的document目錄
    (這里針對document/exclode.txt文件)
    ${project.document.directory}是在pom.xml中自己配置的
    -->
    <fileSet>
      <directory>${project.document.directory}</directory>
      <outputDirectory>document</outputDirectory>
      <excludes>
        <exclude>readme.*</exclude>
      </excludes>
    </fileSet>
 
    <!--
    把項目的腳本文件目錄(src/main/scripts )中的啟動腳本文件,
    打包進zip文件的根目錄
    (這里針對的是src/scripts/execute/include-file.sh文件)
    ${project.script.execute.directory}
    -->
    <fileSet>
      <directory>${project.script.execute.directory}</directory>
      <outputDirectory></outputDirectory>
      <includes>
        <include>*</include>
      </includes>
    </fileSet>
 
  </fileSets>
</assembly>

到此這篇關于Maven 生成打包可執行jar包的方法步驟的文章就介紹到這了,更多相關Maven 生成可執行jar 內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/daerzei/article/details/82883472

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精品免费久久久久久成人影院 | 草莓香蕉榴莲丝瓜秋葵绿巨人在线看 | 99在线免费观看视频 | 果冻传媒新在线观看免费 | 亚洲国产在线播放在线 | 亚洲第一福利网 | 日韩欧美国产一区二区三区 | 91视频a| 成人高清视频在线观看 | 免费国产影视观看网站入口 | 狠狠色综合久久久久尤物 | 99热这里只有精品久久免费 | 国产美女屁股直流白浆视频无遮挡 | 18xxxx中国| 精品四虎国产在免费观看 | 欧美一级欧美一级高清 | 美日毛片 | 日韩欧美高清一区 | 叉逼视频| 国产一区二区三区高清视频 | 好紧水好多 | 波多野结衣两女调教 | 国产成+人+亚洲+欧美综合 | 青草欧美| 性做久久久久久久 | 五月天色小说 | 狠狠色狠狠色综合婷婷tag | 丝袜性爱 | 国产精品俺来也在线观看了 | 精品国产国偷自产在线观看 | 双性双根 | 亚洲高清中文字幕 | 青青草国产精品久久久久 | 国产xxx在线 | 趴好撅高打屁股sp调教h | 日本捏胸吃奶视频免费 | 女人被爽到呻吟娇喘的视频动态图 | 天海翼三级 | 国产成年人视频 | 亚洲精品久久久久69影院 | 日本视频一区在线观看免费 |