生成可执行的jar包
最近在做JAVA 的SDK 工具,由于SDK 依赖了其他的一些开源工具包,打包时少了依赖工具包,这样其他项目想要用SDK 就需要自己额外增加响应依赖,所以想要把依赖打进SDK。示例中依赖了fastjson处理json数据。
其实这也很简单,只需要更改maven 配置即可,有如下几个步骤:
在pom.xml增加以下内容
<plugins><!-- Maven Assembly Plugin --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>2.4.1</version><configuration><!-- get all project dependencies --><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs><!-- MainClass in mainfest make a executable jar --><archive><manifest><mainClass>com.example.App</mainClass></manifest></archive></configuration><executions><execution><id>make-assembly</id><!-- bind to the packaging phase --><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins>
生成jar包,执行以下命令会在target目录生成 demo-jar-with-dependencies.jar
mvn clean package
运行
java -jar target\demo-jar-with-dependencies.jar
运行非指定的启动类
java -cp target\demo-jar-with-dependencies.jar com.example.Test
pom.xml 文件内容
<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/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>demo</artifactId><packaging>jar</packaging><version>1.0-SNAPSHOT</version><name>demo</name><url>http://maven.apache.org</url><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.79</version></dependency></dependencies><build><finalName>demo</finalName><plugins><!-- Maven Assembly Plugin --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>2.4.1</version><configuration><!-- get all project dependencies --><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs><!-- MainClass in mainfest make a executable jar --><archive><manifest><mainClass>com.example.App</mainClass></manifest></archive></configuration><executions><execution><id>make-assembly</id><!-- bind to the packaging phase --><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins></build>
</project>
示例 App.java
package com.example;
import com.alibaba.fastjson.JSONObject;public class App
{public static void main( String[] args ){String str2 = "{\"name\": \"张三\", \"age\": 24, \"city\": \"北京\"}";JSONObject json = JSONObject.parseObject(str2);String name = json.getString("name");String age = json.getString("age");String city = json.getString("city");System.out.println(name);System.out.println(age);System.out.println(city);System.out.println( "Hello World!" );}
}