生成jar包 2種方式:
1.打包項(xiàng)目依賴的所有jar 生成單個(gè)jar包
2.生成jar包 復(fù)制所需的依賴jar包到lib目錄
Maven打包過程(順序)
- clean清空之前生成的文件
- IDE內(nèi)編譯該程序 (并測(cè)試可成功運(yùn)行)-- 必須生成class文件H槎辍(等待被打包)
- 確定文件pom.xml中的各項(xiàng)配置
- Maven刷新:Reimport All Maven Projects
- Maven自動(dòng)打包:Install或package
可打包項(xiàng)目已經(jīng)編譯生成的class文件 + 依賴的jar包 --> 生成單個(gè)jar包(可獨(dú)立運(yùn)行)
例1
下面這個(gè)pom.xml,可打包項(xiàng)目已經(jīng)編譯生成的class文件 + 依賴的jar包 --> 生成單個(gè)jar包(可獨(dú)立運(yùn)行)
searchgeturl-1.0-SNAPSHOT-jar-with-dependencies.jar
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>groupId</groupId>
<artifactId>searchgeturl</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<!--下面必須指定好主類 如com.my.Main -->
<mainClass>Main</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-my-jar-with-dependencies</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<!-- 項(xiàng)目依賴的jar包 -->
<dependencies>
<dependency>
<!-- jsoup HTML parser library @ http://jsoup.org/ -->
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.10.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-cli/commons-cli -->
<dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
<!-- 指定工程編碼為UTF-8
這樣maven install就不會(huì)發(fā)出警告 [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
例1的pom.xml 得到的 完整目錄結(jié)構(gòu):
.
├── archive-tmp
├── classes
│ ├── CommandDemo.class
│ ├── META-INF
│ │ └── MANIFEST.MF
│ └── Main.class
├── maven-archiver
│ └── pom.properties
├── maven-status
│ └── maven-compiler-plugin
│ ├── compile
│ │ └── default-compile
│ │ ├── createdFiles.lst
│ │ └── inputFiles.lst
│ └── testCompile
│ └── default-testCompile
│ └── inputFiles.lst
├── searchgeturl-1.0-SNAPSHOT-jar-with-dependencies.jar
└── searchgeturl-1.0-SNAPSHOT.jar
例2
下面這個(gè)pom.xml椭微,可打包項(xiàng)目已經(jīng)編譯生成的class文件 + 依賴的jar包 --> 生成單個(gè)jar包(可獨(dú)立運(yùn)行)
Cknife-1.0-SNAPSHOT-jar-with-dependencies.jar
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>groupId</groupId>
<artifactId>Cknife</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<!--下面必須指定好主類-->
<mainClass>com.ui.Cknife</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-my-jar-with-dependencies</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source><!-- 源代碼使用的開發(fā)版本 -->
<target>1.8</target><!-- 需要生成的目標(biāo)class文件的編譯版本 -->
<!-- 一般而言央渣,target和source保持一致的葫隙,但有時(shí)候不同:為了讓程序能在其他版本的jdk中運(yùn)行(對(duì)于低版本目標(biāo)jdk恃疯,源代碼中需要不使用低版本jdk不支持的語法) -->
</configuration>
</plugin>
</plugins>
</build>
<!-- 項(xiàng)目依賴的jar包 -->
<dependencies>
<!-- https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc -->
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.16.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.insubstantial/substance -->
<dependency>
<groupId>com.github.insubstantial</groupId>
<artifactId>substance</artifactId>
<version>7.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.insubstantial/trident -->
<dependency>
<groupId>com.github.insubstantial</groupId>
<artifactId>trident</artifactId>
<version>7.3</version>
</dependency>
</dependencies>
<!-- 指定工程編碼為UTF-8
這樣maven install就不會(huì)發(fā)出警告 [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
生成:jar包+lib目錄(依賴包)
例:下面這個(gè)pom.xml 生成 jar包+lib目錄(含依賴包)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>groupId</groupId>
<artifactId>searchgeturl</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<!-- 下面這個(gè)plugin-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix><!--指定classpath的前綴-->
<mainClass>Main</mainClass><!--指定主類的類名-->
</manifest>
</archive>
</configuration>
</plugin>
<!-- -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<!--指定outputDirectory-->
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<!--
<outputDirectory>${project.build.directory}/classes/lib</outputDirectory>
Alternatively use ${project.build.directory}/classes/lib as OutputDirectory to integrate all jar-files into the main jar, but then you will need to add custom classloading code to load the jars.
-->
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<!-- 項(xiàng)目依賴的jar包 -->
<dependencies>
<dependency>
<!-- jsoup HTML parser library @ http://jsoup.org/ -->
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.10.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-cli/commons-cli -->
<dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
<!-- 指定工程編碼為UTF-8
這樣maven install就不會(huì)發(fā)出警告 [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
#用下面的pom.xml 得到的 一部分目錄結(jié)構(gòu)(保證下面的目錄結(jié)構(gòu)即可運(yùn)行jar程序)
─── lib #依賴包
│ ├── commons-cli-1.2.jar
│ └── jsoup-1.10.2.jar
└── searchgeturl-1.0-SNAPSHOT.jar #maven生成的 主jar包
#用下面的pom.xml 得到的 完整目錄結(jié)構(gòu):
── classes #maven生成的
│ ├── CommandDemo.class
│ ├── META-INF
│ │ └── MANIFEST.MF #maven生成的 清淡文件
│ └── Main.class
├── lib #依賴包
│ ├── commons-cli-1.2.jar
│ └── jsoup-1.10.2.jar
├── maven-archiver #maven生成的
│ └── pom.properties
├── maven-status#maven生成的
│ └── maven-compiler-plugin
│ ├── compile
│ │ └── default-compile
│ │ ├── createdFiles.lst
│ │ └── inputFiles.lst
│ └── testCompile
│ └── default-testCompile
│ └── inputFiles.lst
└── searchgeturl-1.0-SNAPSHOT.jar #maven生成的 主jar包