1. 程式人生 > >如果使用Maven打包成一個完整可執行的Jar包

如果使用Maven打包成一個完整可執行的Jar包

Maven提供了這麼一個plugin,。他的作用就是用來打包一個超級Jar包(被稱作uber-jar),其中包含了他依賴的其他Jar包。

使用也是非常簡單:

pom.xml:

<?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>cn.dubby</groupId> <artifactId>undertow-demo</artifactId> <version>1.0</version> <packaging>jar</packaging> <properties> <java.version>1.8</java.version
>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <undertow.version>1.4.21.Final</undertow.version> </properties> <dependencies> <dependency> <groupId>io.undertow</groupId> <artifactId
>
undertow-core</artifactId> <version>${undertow.version}</version> </dependency> <dependency> <groupId>io.undertow</groupId> <artifactId>undertow-servlet</artifactId> <version>${undertow.version}</version> </dependency> <dependency> <groupId>io.undertow</groupId> <artifactId>undertow-websockets-jsr</artifactId> <version>${undertow.version}</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.1.0</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>cn.dubby.undertow.demo.HelloWorldServer</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>

關鍵的就是:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.1.0</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>cn.dubby.undertow.demo.HelloWorldServer</mainClass>
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>
package cn.dubby.undertow.demo;

import io.undertow.Undertow;
import io.undertow.server.HttpHandler;
import io.undertow.server.HttpServerExchange;
import io.undertow.util.Headers;

/**
 * Created by yangzheng03 on 2018/1/4.
 */
public class HelloWorldServer {

    public static void main(final String[] args) {
        Undertow server = Undertow.builder()
                .addHttpListener(8080, "localhost")
                .setHandler(new HttpHandler() {
                    @Override
                    public void handleRequest(final HttpServerExchange exchange) throws Exception {
                        exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain");
                        exchange.getResponseSender().send("Hello World");
                    }
                }).build();
        server.start();
    }
}

因為這個plugin的goal繫結在package階段,所以直接執行mvn package,然後cd進target目錄,執行:

➜  target java -jar undertow-demo-1.0.jar         
一月 04, 2018 1:40:18 下午 org.xnio.Xnio <clinit>
INFO: XNIO version 3.3.8.Final
一月 04, 2018 1:40:18 下午 org.xnio.nio.NioXnio <clinit>
INFO: XNIO NIO Implementation Version 3.3.8.Final

就可以直接執行了~