assembly打包2--依賴路徑

前言

哪些文件是有用的須要打到jar包中呢?
在運行java -jarjava -cp等命令時,會出現沒有主清單屬性,這每每是沒有打進依賴或依賴路徑不對。java

案例分析

咱們使用前文中的案例。shell

1. 自帶的jar-with-dependencies

先看一下使用 <descriptorRef>jar-with-dependencies</descriptorRef>自帶的打進依賴的配置,打成的jar解壓後的文件:api

clipboard.png

分析:
上述文件中,核心代碼和依賴包都放在根目錄下(見org/...
查看MANIFEST.MF:bash

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Class-Path: log4j-1.2.17.jar ant-1.9.1.jar ant-launcher-1.9.1.jar
Created-By: Apache Maven 3.5.4
Build-Jdk: 1.8.0_171
Main-Class: org.mybatis.generator.api.ShellRunner

有Main-Class入口和Class-Path依賴。直接使用:
ava -jar mybatis-generator-modify.jar -configfile generatorConfig.xml
便可運行。mybatis

其餘:一塊兒生成的無依賴jar

跟隨有依賴jar一塊兒生成的無依賴jar,其MANIFEST.MFui

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven 3.5.4
Build-Jdk: 1.8.0_171

其無入口也無依賴包。spa

clipboard.png

2. 使用assembly.xml配置打包

pom中使用配置文件,且此時主入口配置失效(查緣由)。code

<descriptors>
     <descriptor>src/assembly/assembly.xml</descriptor>
</descriptors>

assembly.xml中核心配置:orm

<id>distribution</id>

    <formats>
        <format>dir</format>
    </formats>

    <includeBaseDirectory>false</includeBaseDirectory>

    <dependencySets>
        <dependencySet>
            <outputDirectory>/lib</outputDirectory>
            <excludes>
                <exclude>${project.groupId}:${project.artifactId}</exclude>
            </excludes>
        </dependencySet>
        <dependencySet>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>${project.groupId}:${project.artifactId}</include>
            </includes>
        </dependencySet>
    </dependencySets>

mybatis-generator-modify-distribution文件夾下,生成的文件以下:xml

clipboard.png
其中jar中的內容以下:

clipboard.png
MANIFEST.MF文件無依賴也無入口
使用命令便可執行:

java -cp mybatis-generator-modify-1.0-SNAPSHOT.jar:./lib/* org.mybatis.generator.api.ShellRunner -configfile ../generatorConfig.xml

運行時,指出依賴和入口。

3. 其餘配置說明

關於dependencySets標籤

<dependencySets>
        <dependencySet>
            <outputDirectory>/lib</outputDirectory>
            <!--<excludes>-->
                <!--<exclude>${project.groupId}:${project.artifactId}</exclude>-->
            <!--</excludes>-->
        </dependencySet>
        <dependencySet>
            <outputDirectory>/</outputDirectory>
            <!--<includes>-->
                <!--<include>${project.groupId}:${project.artifactId}</include>-->
            <!--</includes>-->
        </dependencySet>
    </dependencySets>

dependencySets不配includesexcludes時,默認包含主模塊依賴包兩塊。如上述配置,如註釋掉includes和excludes,將會在打包後的根目錄下和/lib目錄下,生成徹底同樣的主包和依賴。

clipboard.png

所以,上述配置的excludesincludes時必須的。

4. 將腳本等配置也打包進來

咱們將啓動腳本放在

src
 |-shell
     |-startup.sh
     |-config
         |-generatorConfig.xml

咱們將其一併打包:

<!--<dependencySets>等其餘配置...-->
    
    <fileSets>
        <fileSet>
            <directory>src/shell</directory>
            <outputDirectory>/shell</outputDirectory>
            <fileMode>755</fileMode>
        </fileSet>
    </fileSets>

並賦予755權限。

shartup.sh:

java -cp \
../mybatis-generator-modify-1.0-SNAPSHOT.jar:./lib/* \
org.mybatis.generator.api.ShellRunner \
-configfile ./config/generatorConfig.xml
相關文章
相關標籤/搜索