生成jar包 2种方式:
1.打包项目依赖的所有jar 生成单个jar包
2.生成jar包 复制所需的依赖jar包到lib目录
Maven打包过程(顺序)
- clean清空之前生成的文件
- IDE内编译该程序 (并测试可成功运行)-- 必须生成class文件!(等待被打包)
- 确定文件pom.xml中的各项配置
- Maven刷新:Reimport All Maven Projects
- Maven自动打包:Install或package
可打包项目已经编译生成的class文件 + 依赖的jar包 --> 生成单个jar包(可独立运行)
例1
下面这个pom.xml,可打包项目已经编译生成的class文件 + 依赖的jar包 --> 生成单个jar包(可独立运行)
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>
<!-- 项目依赖的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就不会发出警告 [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 得到的 完整目录结构:
.
├── 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
下面这个pom.xml,可打包项目已经编译生成的class文件 + 依赖的jar包 --> 生成单个jar包(可独立运行)
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><!-- 源代码使用的开发版本 -->
<target>1.8</target><!-- 需要生成的目标class文件的编译版本 -->
<!-- 一般而言,target和source保持一致的,但有时候不同:为了让程序能在其他版本的jdk中运行(对于低版本目标jdk,源代码中需要不使用低版本jdk不支持的语法) -->
</configuration>
</plugin>
</plugins>
</build>
<!-- 项目依赖的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就不会发出警告 [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目录(依赖包)
例:下面这个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>
<!-- 下面这个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>
<!-- 项目依赖的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就不会发出警告 [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 得到的 一部分目录结构(保证下面的目录结构即可运行jar程序)
─── lib #依赖包
│ ├── commons-cli-1.2.jar
│ └── jsoup-1.10.2.jar
└── searchgeturl-1.0-SNAPSHOT.jar #maven生成的 主jar包
#用下面的pom.xml 得到的 完整目录结构:
── 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包