如果使用Maven打包成一个完整可执行的Jar包

原文链接:https://blog.dubby.cn/detail.html?id=9083

Maven提供了这么一个plugin,Apache Maven Shade Plugin。他的作用就是用来打包一个超级Jar包(被称作uber-jar),其中包含了他依赖的其他Jar包。

使用也是非常简单:

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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>

    <groupId>cn.dubbygroupId>
    <artifactId>undertow-demoartifactId>
    <version>1.0version>
    <packaging>jarpackaging>

    <properties>
        <java.version>1.8java.version>
        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
        <undertow.version>1.4.21.Finalundertow.version>
    properties>

    <dependencies>
        <dependency>
            <groupId>io.undertowgroupId>
            <artifactId>undertow-coreartifactId>
            <version>${undertow.version}version>
        dependency>
        <dependency>
            <groupId>io.undertowgroupId>
            <artifactId>undertow-servletartifactId>
            <version>${undertow.version}version>
        dependency>
        <dependency>
            <groupId>io.undertowgroupId>
            <artifactId>undertow-websockets-jsrartifactId>
            <version>${undertow.version}version>
        dependency>
    dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-compiler-pluginartifactId>
                <configuration>
                    <source>1.8source>
                    <target>1.8target>
                configuration>
            plugin>

            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-shade-pluginartifactId>
                <version>3.1.0version>
                <executions>
                    <execution>
                        <phase>packagephase>
                        <goals>
                            <goal>shadegoal>
                        goals>
                        <configuration>
                            <transformers>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>cn.dubby.undertow.demo.HelloWorldServermainClass>
                                transformer>
                            transformers>
                        configuration>
                    execution>
                executions>
            plugin>
        plugins>
    build>

project>

关键的就是:

<plugin>
    <groupId>org.apache.maven.pluginsgroupId>
    <artifactId>maven-shade-pluginartifactId>
    <version>3.1.0version>
    <executions>
        <execution>
            <phase>packagephase>
            <goals>
                <goal>shadegoal>
            goals>
            <configuration>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>cn.dubby.undertow.demo.HelloWorldServermainClass>
                    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 
INFO: XNIO version 3.3.8.Final
一月 04, 2018 1:40:18 下午 org.xnio.nio.NioXnio 
INFO: XNIO NIO Implementation Version 3.3.8.Final

就可以直接执行了~

你可能感兴趣的:(Java,ubuntu)