java项目将依赖打进jar、并生成可执行的jar

2023-12-13 05:49:47

生成可执行的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!" );
    }
}



文章来源:https://blog.csdn.net/robinhunan/article/details/134901241
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。