IDEA+Maven 打jar包

IDEA+Maven 打jar包 (包涵依賴jar)

最新修改
之前寫的打包方式可能看起來有些繁瑣,這裏給出進一步簡潔的解決方案簡單粗暴web

寫在前面:apache

​ 這兩天一直在整(gu)理(dao)IDEA 用Maven打jar包,網上的教程是各式各樣,可是都不能知足個人需求(或者 尚未找個正確的),所以 綜合網上的內容 本身整理了一下(如下內容是在mac系統下 win 可能有一些地方不同)。app

軟件環境:maven

​ IDEA:2017.1.5svg

​ Maven:3.3.9工具

打jar包:ui

  • IDEA 自帶的打包工具使用spa

    • 打無依賴jar包插件

      1. 若是工程目錄中有如下文件夾 刪掉
        這裏寫圖片描述
    1. 點擊工程上方【File】菜單選擇【Project Structure】
      這裏寫圖片描述
    2. 點擊【+】 選擇【JAR】,【From modules with dependencies】點擊【ok】
      這裏寫圖片描述
    3. 點擊【1】選擇你要打包的Module,點擊【2】選擇你的主類(也就是你的程序的入口)而後點擊【ok】這裏寫圖片描述
    4. 點擊【ok】
      這裏寫圖片描述
    5. 【1】是要打的jar包的名字,【2】是jar包的輸出路徑,【3】是程序所須要的jar依賴,【4】是程序主類的名稱。由於這裏是打沒有依賴的jar包,因此將【3】裏面不須要的jar包刪掉就行。最後點擊【ok】這裏寫圖片描述
    6. 而後就會生成一個META-INF的文件夾,裏面就是一些配置屬性
    • 打包涵依賴jar包
      對以上的方式中的步驟6中 不作任何修改,而後執行步驟7

  • Maven 打包
    • 打無依賴jar包scala

      1. 在pom.xml 文件里加入

        <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-jar-plugin</artifactId>
              <version>2.4</version>
              <configuration>
                <archive>
                      生成的jar中,不要包含pom.xml和pom.properties這兩個文件
                  <addMavenDescriptor>false</addMavenDescriptor>
                  <manifest>
                        是否要把第三方jar放到manifest的classpath中
                    <addClasspath>true</addClasspath>
                       生成的manifest中classpath的前綴,由於要把第三方jar放到lib目錄下,因此classpath的前綴是lib/
                    <classpathPrefix>lib/</classpathPrefix>
                        應用的main class
                    <mainClass>com.yourClass</mainClass>
                  </manifest>
                </archive>
                    過濾掉不但願包含在jar中的文件
                <excludes>
                  <exclude>${project.basedir}/xml/*</exclude>
                </excludes>
             </configuration>
         </plugin>
      2. 點開Maven管理工具
        這裏寫圖片描述

      3. 點擊【package】
        這裏寫圖片描述

      4. 等運行完之後就會生成jar包了
        這裏寫圖片描述

    • 打包涵依賴jar包
      第一種方法
      1. 在pom.xml文件中寫入

      <build>
           <plugins>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>3.1</version>
            </plugin>
            <plugin>
              <artifactId>maven-assembly-plugin</artifactId>
              <configuration>
                <archive>
                  <manifest>
                    <mainClass>com.test.app</mainClass>
                  </manifest>
                </archive>
                <descriptorRefs>
                  <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
              </configuration>
              <!--下面是爲了使用 mvn package命令,若是不加則使用mvn assembly-->
              <executions>
                <execution>
                  <id>make-assemble</id>
                  <phase>package</phase>
                  <goals>
                    <goal>single</goal>
                  </goals>
                </execution>
              </executions>
            </plugin>
           </plugins>
        </build>
      1. 而後執行上面【Maven 打無依賴包】步驟2到步驟4

      第二種方法

      1. 在pom.xml文件中寫入
        <plugin>
         <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <version>2.4</version>
          <configuration>
            <archive>
                 <!-- 生成的jar中,不要包含pom.xml和pom.properties這兩個文件-->
              <addMavenDescriptor>false</addMavenDescriptor>
              <manifest>
                    <!--是否要把第三方jar放到manifest的classpath中-->
                <addClasspath>true</addClasspath>
                   <!--生成的manifest中classpath的前綴,由於要把第三方jar放到lib目錄下,因此classpath的前綴是lib/-->
                <classpathPrefix>lib/</classpathPrefix>
                   <!-- 應用的main class-->
                <mainClass>com.yourClass</mainClass>
              </manifest>
            </archive>
              <!-- 過濾掉不但願包含在jar中的文件-->
            <excludes>
              <exclude>${project.basedir}/xml/*</exclude>
            </excludes>
         </configuration>
        </plugin>
        
        <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-assembly-plugin</artifactId>
              <version>2.4</version>
              <configuration>
                <descriptors>
                  <descriptor>src/main/assembly/package.xml</descriptor>
                </descriptors>
              </configuration>
              <executions>
                <execution>
                  <id>make-assembly</id>
                  <phase>package</phase>
                  <goals>
                    <goal>single</goal>
                  </goals>
                </execution>
              </executions>
            </plugin>
      2. 建立【src/main/assembly】目錄
      3. 建立package.xml文件
        <assembly>
          <id>bin</id>
          <!-- 最終打包成一個用於發佈的zip文件 -->
          <formats>
              <format>zip</format>
          </formats>
          <!-- Adds dependencies to zip package under lib directory -->
          <dependencySets>
              <dependencySet>
                  <!--
                     不使用項目的artifact,第三方jar不要解壓,打包進zip文件的lib目錄
                 -->
                  <useProjectArtifact>false</useProjectArtifact>
                  <outputDirectory>lib</outputDirectory>
                  <unpack>false</unpack>
              </dependencySet>
          </dependencySets>
        
          <fileSets>
              <!-- 把項目相關的說明文件,打包進zip文件的根目錄 -->
              <fileSet>
                  <directory>${project.basedir}</directory>
                  <outputDirectory>/</outputDirectory>
                  <includes>
                      <include>README*</include>
                      <include>LICENSE*</include>
                      <include>NOTICE*</include>
                  </includes>
              </fileSet>
        
              <!-- 把項目的配置文件,打包進zip文件的config目錄 -->
              <fileSet>
                  <directory>${project.basedir}\src\main\config</directory>
                  <outputDirectory>config</outputDirectory>
                  <includes>
                      <include>*.xml</include>
                      <include>*.properties</include>
                  </includes>
              </fileSet>
        
              <!-- 把項目的腳本文件目錄( src/main/scripts )中的啓動腳本文件,打包進zip文件的跟目錄 -->
              <fileSet>
                  <directory>${project.build.scriptSourceDirectory}</directory>
                  <outputDirectory></outputDirectory>
                  <includes>
                      <include>startup.*</include>
                  </includes>
              </fileSet>
        
              <!-- 把項目的腳本文件(除了啓動腳本文件),打包進zip文件的script目錄 -->
              <fileSet>
                  <directory>${project.build.scriptSourceDirectory}</directory>
                  <outputDirectory></outputDirectory>
        
                  <excludes>
                      <exclude>startup.*</exclude>
                  </excludes>
              </fileSet>
        
              <!-- 把項目本身編譯出來的jar文件,打包進zip文件的根目錄 -->
              <fileSet>
                  <directory>${project.build.directory}</directory>
                  <outputDirectory></outputDirectory>
                  <includes>
                      <include>*.jar</include>
                  </includes>
              </fileSet>
          </fileSets>
        </assembly>
      4. 將【package.xml】文件放入【assembly】文件夾中
        這裏寫圖片描述
      5. 而後執行上面【Maven 打無依賴包】步驟2到步驟4

若是要打包scala代碼須要添加插件:
方案一:

<plugin>
		<groupId>net.alchim31.maven</groupId>
		<artifactId>scala-maven-plugin</artifactId>
		<version>3.4.0</version>
	 </plugin>

方案二:

<plugin>
		<groupId>org.scala-tools</groupId>
		<artifactId>maven-scala-plugin</artifactId>
 		<version>2.15.2</version>
	</plugin>

推薦方案一,方案二中的插件最新更新日期是2011年

簡單粗暴
將下面的任意一種方案放到pom文件中,並修改爲本身項目中的MainClass便可

</plugins>
    </build>
     方案一 or 方案二
     <build>
<plugins>
  • 方案一:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.0.0</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>com.test.MainClass</mainClass>   <!--帶有包路徑的MainClass -->
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>
  • 方案二:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <archive>
            <manifest>
                <mainClass>com.test.MainClass</mainClass>   <!--帶有包路徑的MainClass -->
            </manifest>
        </archive>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>

    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

注:

本文屬於做者原創,如需轉載,請註明。

內部若是引用的文字,鏈接,圖片等資源存在侵犯原做者的狀況,請聯繫本人,當即刪除。