用maven打包含依赖的jar包

news/2024/7/21 4:30:24 标签: maven, 编程, excel, cmd

今天给同学做一个excel处理的小工具的时候,因为同学不懂编程,又不想安装过多的环境什么的,就决定采用jar包的形式,让他在cmd中运行这个小工具.

遇到的问题:直接生成jar包,并且运行的是jar中的main方法.
采取的解决方式:用maven生成包含依赖的jar包,并且指定运行jar的时候,用哪一个方法作为程序的入口.

1.在maven项目中的pom.xml添加插件maven-assembly-plugin

<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>baidu.data.api</groupId>
    <artifactId>scott.test</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>scott.test</name>
    <url>http://maven.apache.org</url>


    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.0.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>

             <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <appendAssemblyId>false</appendAssemblyId>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <!-- mainClass用来指定main方法入口 -->
                            <mainClass>excelUtil.ExcelUtil</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>assembly</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>


    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <!-- 下面都是需要依赖的jar包 -->
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>asm</groupId>
            <artifactId>asm</artifactId>
            <version>2.2.3</version>
        </dependency>

        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.4</version>
        </dependency>


        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.17</version>
        </dependency>

        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>2.2.9</version>
        </dependency>

    </dependencies>




</project>

并且在mainClass 中指定程序的入口(这里是main方法).
2.然后使用mvn clean package 进行打包.将会在项目的target中生成一个jar包.
3.最后使用java -jar XXX.jar,运行即可.

可能会遇到的坑:
1.maven默认编译版本是1.4,所以使用1.4以上的版本的jdk写的代码,用maven编译会报错,类似maven 不支持1.7或1.8”,点击-参考我的转载的一篇文章

2.注:有的人编码方式没有设置过,会报”编码GBK的不可映射字符(类似这样的)”,maven默认是根据不同平台使用不同的编码,window下是GBK,所以需要在pom.xml中添加

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.0.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <!-- 这里指定编码方式就不会报错了-->
                    <encoding>UTF-8</encoding>
                </configuration>
</plugin>

3.可能有报错:找不到主类和没有主清单属性的解决,主要是因为在maven-assembly里面没有指定mainClass.


http://www.niftyadmin.cn/n/866315.html

相关文章

ROS-发布者程序

以geometry_msgs/Twist为例说明。 一.发布消息 1.包含消息类型的声明 # include <package_name/type_name.h>功能包名应该是定义消息类型的包的名称&#xff0c;不一定是自己的包的名称。如想发布一条类型为geometry_msgs/Twist的消息&#xff08;名为geometry_msgs的…

(16)图像特征提取--SIFT、SURF

图像处理总结请参考以下博客&#xff0c; 1. SIFT特征点提取&#xff1a;链接&#xff1a;https://blog.csdn.net/lingyunxianhe/article/details/79063547 2. SIFT特征匹配算法介绍——寻找图像特征点的原理&#xff1a;链接&#xff1a;https://blog.csdn.net/weixin_38404…

说说在 Android 中如何使用 SharedPreferences 存取数据

Android 中的 SharedPreferences 是使用键值对来存储数据的&#xff0c;存储的值支持不同的数据类型。 1 存储数据 要想使用 SharedPreferences 来存储数据&#xff0c;首先要获取到 SharedPreferences 对象。Android 提供了以下三种方法来得到 SharedPreferences 对象&#…

HttpServletRequest的getParameter()的坑

问题: 最近做项目的时候和对接方联调的时候&#xff0c;对接方会传入一个url给我们&#xff0c;然后经过一系列的操作之后&#xff0c;我们会将一些参数返回到该url上&#xff0c;回调给对接方。然而当使用了getParameter获取传入的url的时候发现&#xff0c;获取的url并不是对…

ROS--订阅者程序

一、编写回调函数 订阅者节点无法知道消息什么时候到达&#xff0c;为了解决这个问题&#xff0c;必须把响应收到消息事件的代码放到回调函数中&#xff0c;ros每接受一个新的消息将调用一次这个函数。 void function_name(const package_name::type_name &msg) { ... } …

Jetson Nano(1)-- VNC server 远程连接

解決nvidia Jetson無法遠端VNC問題&#xff0c;當你要開啟桌面分享的功能時&#xff0c;都會跳出錯誤訊息&#xff0c;導致無法使用遠端桌面分享的功能 研究了幾天之後&#xff0c;解決方案如下&#xff1a; 開啟終端機指令視窗&#xff0c;分次執行以下程式&#xff0c; 一、…

浅析Hotspot JIT编译

1. 什么是编译? 像java,C语言这些高级程序语言,计算机并不能直接执行.计算机认识的是汇编或者机器语言,是可以直接由计算机直接执行的.所以从高级语言转化为计算机认识的低级语言的过程叫做编译. 上图是javac编译的过程,编译完成后会生成字节码,也就是.class文件.之后…

说说 jBPM 流程定义语言(10)—— 自动活动

jBPM4 能够很好地支持多种自动活动&#xff0c;所谓自动活动指的是在执行过程中完全无须人工干预。 jBPM4 默认支持的自动活动类型有&#xff1a; * java - Java 程序活动 * script - 脚本活动 * hql - Hibernate 查询语言活动 * SQL - SQL 查询语言活动 * mail - 邮件活…