zoukankan      html  css  js  c++  java
  • 使用maven插件构建可运行jar

    当使用java+maven进行构建项目时,不依赖spring相关的东西,比如在做一些简单地应用类java项目时,当用到一些第三方的依赖jar是,在项目编写好之后,我们希望将项目构建成一个可运行的jar包并包含依赖的jar包,然后通过jar -jar xxx.jar来运行,这时我们可以使用maven的插件maven-assembly-plugin来实现。

    maven-assembly-plugin 插件官方文档:http://maven.apache.org/plugins/maven-assembly-plugin/index.html

    1、pom依赖:

    <build>
            <finalName>jar_handle</finalName>
            <!--使用Maven编译可执行的jar -->
            <plugins>
                <plugin>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <configuration>
                        <appendAssemblyId>false</appendAssemblyId>
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                        <archive>
                            <manifest>
    <!-- 程序入口 --> <mainClass>com.xxx.Main</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>assembly</goal> </goals> </execution> </executions> </plugin> </plugins> </build>

    maven-assembly-plugin插件会把项目中用到的依赖jar包包含在可执行的jar包中,这样项目在运行时有引用依赖jar的API地方就不会报错。使用idea工具可以看到assembly插件:

    2、然后我们可以直接通过mvn clean install命令就会生成需要的jar包,如下:

    这样就可以使用jar -jar命令来运行应用jar了

    附注:

    1、对于不依赖第三方的依赖jar时,我们可以使用maven-jar-plugin插件进行打包构建可运行jar,pom配置如下:

               <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <configuration>
                        <archive>
                            <manifest>
    <!-- 设置是否添加类路径属性 --> <addClasspath>true</addClasspath>
    <!-- 设置类路径前缀 --> <classpathPrefix>lib/</classpathPrefix>
    <!-- 程序路口 --> <mainClass>com.xxx.Main</mainClass> </manifest> </archive> </configuration> </plugin>

    使用mvn clean install构建包如下

    可以看到该插件不会把依赖jar构建进最终jar包中。

    2、此时可以考虑使用maven-dependency-plugin将需要的依赖jar复制到某个文件目录下,在后续启动应用jar时将目录路径设置成maven-jar-plugin插件设置的classpathPrefix属性设置的关联路径来运行。

    pom配置

    <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <configuration>
                        <archive>
                            <manifest>
                                <addClasspath>true</addClasspath>
                                <classpathPrefix>lib/</classpathPrefix>
                                <mainClass>com.xxx.Main</mainClass>
                            </manifest>
                        </archive>
                    </configuration>
                </plugin>
                <!-- 拷贝依赖的jar包到lib目录 -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>copy</id>
                            <phase>package</phase>
                            <goals>
                                <goal>copy-dependencies</goal>
                            </goals>
                            <configuration>
                                <outputDirectory>
                                    ${project.build.directory}/lib
                                </outputDirectory>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>

    上述中的classpathPrefix属性设置了类路径加载路径配置,需配合addClasspath设置为true一起使用。效果详见下图:

    应用运行时就会按设置的路径去加载依赖jar,此时就是配置好依赖jar的路径与设置的路径一致即可。

  • 相关阅读:
    .NET控件ZedGraph使用帮助
    .NET多线程编程(转)
    DataTable 添加列、设置主键、添加行、查询、更新
    一个有用的Windows服务小程序——用来完成Server端的Socket通信[转载]
    (周星驰版)学习委托的最好实例 (转载+自己补充了注释)
    这样写
    DataTable添加列和行的方法
    简单工厂之简单模型(uml)
    学了delegate委托还有event事件的联系,基本学明白了。先总结一下吧。[转载]
    HDU_1240——三维空间DFS
  • 原文地址:https://www.cnblogs.com/kingsonfu/p/12402735.html
Copyright © 2011-2022 走看看