溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

java如何實現(xiàn)自定義zip包

發(fā)布時間:2020-11-19 16:26:49 來源:億速云 閱讀:168 作者:Leah 欄目:編程語言

java如何實現(xiàn)自定義zip包?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

1.配置pom.xml文件,添加build節(jié)點

<build>
    <!-- 輸出的包名 -->
    <finalName>p2p</finalName>


    <sourceDirectory>src/main/java</sourceDirectory>

    <resources>
      <!-- 控制資源文件的拷貝(默認復(fù)制到classes目錄,最后打進jar包) -->
      <resource>
        <directory>src/main/resources</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <!-- 排除外置的配置文件(運行時注釋上使IDE能讀取到配置文件;打包時放開注釋讓配置文件外置方便修改) -->
        <excludes>
          <exclude>config.properties</exclude>
        </excludes>
      </resource>
      <!-- 配置文件外置的資源(存放到config目錄,也是classpath路徑,下面會配置) -->
      <resource>
        <directory>src/main/resources</directory>
        <includes>
          <include>config.properties</include>
        </includes>
        <targetPath>${project.build.directory}/config</targetPath>
      </resource>
    </resources>

    <plugins>
      <!-- 設(shè)置編譯版本 -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>

      <!-- 打包jar文件時,配置manifest文件,加入lib包的jar依賴 -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
          <archive>
            <!-- 清單文件,設(shè)置入口類和classpath -->
            <manifest>
              <mainClass>com.hdwang.Application</mainClass>
              <addClasspath>true</addClasspath>
              <classpathPrefix>lib/</classpathPrefix>
            </manifest>
            <!-- 給清單文件添加鍵值對,增加classpath路徑,這里將config目錄也設(shè)置為classpath路徑 -->
            <manifestEntries>
              <Class-Path>config/</Class-Path>
            </manifestEntries>
          </archive>
          <classesDirectory>
          </classesDirectory>
        </configuration>
      </plugin>


      <!-- 拷貝依賴的jar包到lib目錄 -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
          <execution>
            <id>copy</id>
            <phase>package</phase>
            <goals>
              <goal>copy-dependencies</goal>
            </goals>
            <configuration>
              <outputDirectory>
                ${project.build.directory}/lib
              </outputDirectory>
            </configuration>
          </execution>
        </executions>
      </plugin>


      <!-- 解決資源文件的編碼問題 -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.5</version>
        <configuration>
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>

      <!-- 自定義打zip包 -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.2.1</version>
        <configuration>
          <descriptors>
            <descriptor>src/main/assembly/assembly.xml</descriptor>
          </descriptors>
        </configuration>
        <executions>
          <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

這個pom配置文件中注意紅色字體部分,這是實現(xiàn)配置文件外置的關(guān)鍵配置,思路就是配置文件不打進jar包,放置到外面,且將此文件夾設(shè)置為classpath,這樣子程序便可以通過根據(jù)classloader很方便地讀取到配置文件了。下面給出讀取配置文件的java代碼,在IDE運行時和打包后,代碼都不用修改,因為配置文件總能從classpath路徑中找到?。?!

java如何實現(xiàn)自定義zip包

工具包的maven信息

<dependency>
  <groupId>commons-configuration</groupId>
  <artifactId>commons-configuration</artifactId>
  <version>1.10</version>
</dependency>

2.新建maven-assembly-plugin插件的配置文件assembly.xml,內(nèi)容如下

<assembly>
  <id>bin</id>
  <formats>
    <format>zip</format>
  </formats>
  <!-- 使用assembly拷貝依賴包 -->
  <!--<dependencySets>-->
    <!--<dependencySet>-->
      <!--&lt;!&ndash; 是否包含自己(將項目生成的jar包也輸出到lib目錄) &ndash;&gt;-->
      <!--<useProjectArtifact>false</useProjectArtifact>-->
      <!--<outputDirectory>lib</outputDirectory>-->
    <!--</dependencySet>-->
  <!--</dependencySets>-->
  <fileSets>
    <!-- 從目標(biāo)目錄拷貝文件去壓縮 -->
    <fileSet>
      <directory>target</directory>
      <includes>
        <include>*.jar</include>
      </includes>
      <outputDirectory>/</outputDirectory>
    </fileSet>
    <fileSet>
      <directory>target/lib</directory>
      <outputDirectory>/lib</outputDirectory>
    </fileSet>
    <fileSet>
      <directory>target/config</directory>
      <outputDirectory>/config</outputDirectory>
    </fileSet>

    <!-- 從源目錄拷貝文件去壓縮 -->
    <fileSet>
      <directory>src/main/run</directory>
      <includes>
        <include>*.sh</include>
        <include>*.cmd</include>
      </includes>
      <outputDirectory>/</outputDirectory>
    </fileSet>
    <fileSet>
      <directory>src/main</directory>
      <includes>
        <include>ReadMe.txt</include>
      </includes>
      <outputDirectory>/</outputDirectory>
    </fileSet>
  </fileSets>
</assembly>

這個插件在package生命周期中運行,執(zhí)行mvn package或者mvn install便可觸發(fā)此插件的執(zhí)行。這里我注釋掉了拷貝依賴包的代碼,是因為在pom.xml文件中已經(jīng)配置了maven-dependency-plugin執(zhí)行這樣的操作,無須重復(fù)配置。fileSet可以配置需要拷貝壓縮的文件,directory路徑相對于項目根目錄,outputDirectory路徑相對于輸出目錄target,includes可以對拷貝的文件進行篩選。這里可以拷貝壓縮輸出目錄的文件,應(yīng)該就是因為此插件運行在程序編譯打包之后,這樣子就達到了我們自定義打包的要求:編譯->拷貝資源文件->項目打包->拷貝依賴的jar包-> assembly進行拷貝壓縮。然后使用打出的zip包就可以去部署發(fā)布了,解壓后就能運行。

3.程序打包流程示意圖

java如何實現(xiàn)自定義zip包

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI