哪些文件是有用的須要打到jar包中呢?
在運行java -jar
或java -cp
等命令時,會出現沒有主清單屬性,這每每是沒有打進依賴或依賴路徑不對。java
咱們使用前文中的案例。shell
先看一下使用 <descriptorRef>jar-with-dependencies</descriptorRef>
自帶的打進依賴的配置,打成的jar解壓後的文件:api
分析:
上述文件中,核心代碼和依賴包都放在根目錄下(見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,其MANIFEST.MF
:ui
Manifest-Version: 1.0 Archiver-Version: Plexus Archiver Created-By: Apache Maven 3.5.4 Build-Jdk: 1.8.0_171
其無入口也無依賴包。spa
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
其中jar中的內容以下:
MANIFEST.MF文件無依賴也無入口。
使用命令便可執行:
java -cp mybatis-generator-modify-1.0-SNAPSHOT.jar:./lib/* org.mybatis.generator.api.ShellRunner -configfile ../generatorConfig.xml
運行時,指出依賴和入口。
<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
不配includes
和excludes
時,默認包含主模塊
和依賴包
兩塊。如上述配置,如註釋掉includes和excludes,將會在打包後的根目錄
下和/lib
目錄下,生成徹底同樣的主包和依賴。
所以,上述配置的excludes
和includes
時必須的。
咱們將啓動腳本放在
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