一、现象说明
pom有以下依赖
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!--阿里巴巴开源json解析框架-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.51</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
</dependencies>
IDEA常用打包方式,只会包含我们自己编写的主类,不会包含依赖jar包。点击package打包后
使用WinRAR打开dw-1.0.jar,发现只有自己编写的主类
而maven添加的依赖没有打进去,传到服务器执行会报错(因为服务没有我们添加的依赖jar包)
所以我们需要将服务器上没有的jar包打进去(例如spark开发需要把spark-streaming-kafka-0-10_2.11包打进去,因为提交spark作业的客户端只有spark-core、spark-sql等的jar包)
二、具体操作
1、pom文件添加maven-assembly-plugin
在 <plugins></plugins>标签里面
<!-- 加载打包插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<!-- jar包的后缀名 -->
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
2、编辑IDEA运行的Edit Configuration
点击+选择Mavn
添加命令:clean assembly:assembly
3、对不需要的依赖jar添加provided,有provided标记的就不会打进最终包里面(打包完成后本地运行记得去掉provided)
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
<scope>provided</scope>
</dependency>
<!--阿里巴巴开源json解析框架-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.51</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
</dependencies>
4、运行刚才的manven命令
WinRAR打开查看ch里面就是pom里面的logback相关的依赖,com里面是fastjson相关的依赖,因为slf4j添加了provided标记所以这里没有。