您好,登錄后才能下訂單哦!
java如何實現自定義zip包?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
1.配置pom.xml文件,添加build節點
<build> <!-- 輸出的包名 --> <finalName>p2p</finalName> <sourceDirectory>src/main/java</sourceDirectory> <resources> <!-- 控制資源文件的拷貝(默認復制到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> <!-- 設置編譯版本 --> <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> <!-- 清單文件,設置入口類和classpath --> <manifest> <mainClass>com.hdwang.Application</mainClass> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> </manifest> <!-- 給清單文件添加鍵值對,增加classpath路徑,這里將config目錄也設置為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配置文件中注意紅色字體部分,這是實現配置文件外置的關鍵配置,思路就是配置文件不打進jar包,放置到外面,且將此文件夾設置為classpath,這樣子程序便可以通過根據classloader很方便地讀取到配置文件了。下面給出讀取配置文件的java代碼,在IDE運行時和打包后,代碼都不用修改,因為配置文件總能從classpath路徑中找到!!!
工具包的maven信息
<dependency> <groupId>commons-configuration</groupId> <artifactId>commons-configuration</artifactId> <version>1.10</version> </dependency>
2.新建maven-assembly-plugin插件的配置文件assembly.xml,內容如下
<assembly> <id>bin</id> <formats> <format>zip</format> </formats> <!-- 使用assembly拷貝依賴包 --> <!--<dependencySets>--> <!--<dependencySet>--> <!--<!– 是否包含自己(將項目生成的jar包也輸出到lib目錄) –>--> <!--<useProjectArtifact>false</useProjectArtifact>--> <!--<outputDirectory>lib</outputDirectory>--> <!--</dependencySet>--> <!--</dependencySets>--> <fileSets> <!-- 從目標目錄拷貝文件去壓縮 --> <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生命周期中運行,執行mvn package或者mvn install便可觸發此插件的執行。這里我注釋掉了拷貝依賴包的代碼,是因為在pom.xml文件中已經配置了maven-dependency-plugin執行這樣的操作,無須重復配置。fileSet可以配置需要拷貝壓縮的文件,directory路徑相對于項目根目錄,outputDirectory路徑相對于輸出目錄target,includes可以對拷貝的文件進行篩選。這里可以拷貝壓縮輸出目錄的文件,應該就是因為此插件運行在程序編譯打包之后,這樣子就達到了我們自定義打包的要求:編譯->拷貝資源文件->項目打包->拷貝依賴的jar包-> assembly進行拷貝壓縮。然后使用打出的zip包就可以去部署發布了,解壓后就能運行。
3.程序打包流程示意圖
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。