文章目录
步骤
- 用 maven 打 jar 包,需要在 pom.xml 文件中添加打包插件依赖
xml
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<artifactSet>
<excludes>
<exclude>com.google.code.findbugs:jsr305</exclude>
<exclude>org.slf4j:*</exclude>
<exclude>log4j:*</exclude>
</excludes>
</artifactSet>
<filters>
<filter>
<!-- Do not copy the signatures in the META-INF folder.
Otherwise, this might cause SecurityExceptions when using the JAR. -->
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
<transformers combine.children="append">
<transformer
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer">
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
- 建议:对导入的依赖添加 scope
作用:打包时,不将该依赖放入jar包中。
因为:集群中,一般已经具备任务运行所需的所有依赖。
xml
<!-- 举例 -->
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-java</artifactId>
<version>${flink.version}</version>
<!-- 打包时,不将该依赖放入jar包中 -->
<scope>provided</scope>
</dependency>
- 打包前,需要先执行 clean,再执行 package
如果第2步骤没有添加 scope,那么这两个Jar文件的大小是不一样的。
注意事项
- 当我们对导入的依赖添加 scope后,IDEA 的程序运行会报错:Caused by: java.lang.ClassNotFoundException xxx
解决办法:
缺点:每一次新建文件均需打勾勾。
解决办法:
添加 application template