您的jar文件是针对整个包的,它通常聚合java类文件、一些元数据和资源文件。之所以是jar是因为中定义的jarpom.xml文件. 如果您展开jar文件,您将在各自的包中看到这两个java类文件。
我们看到2jar文件的原因是添加了Maven Shade插件。第一个jar(flint-demo-1.0-快照.jar)由默认的maven jar插件和另一个插件(original-flint-demo-1.0)生成-快照.jar)从maven shade插件。
Maven Shade插件帮助我们生成uber jar/fat jar。我们还可以控制依赖性,即包括/排除依赖性,就像在这个示例flink项目中所做的那样。因此,当您运行mvn clean包时,您应该会看到一些依赖项被排除在中pom.xml文件文件如下所示
[INFO] --- maven-shade-plugin:3.1.1:shade (default) @ flint-demo ---
[INFO] Excluding org.slf4j:slf4j-api:jar:1.7.15 from the shaded jar.
[INFO] Excluding org.slf4j:slf4j-log4j12:jar:1.7.7 from the shaded jar.
[INFO] Excluding log4j:log4j:jar:1.2.17 from the shaded jar.
[INFO] Replacing original artifact with shaded artifact.
要了解更多关于maven shade插件的信息,可以在这里和这里查看
如果你想排除任何文件,比如说BatchJob,你可以使用Maven编译器插件。我在示例项目中看到maven编译器插件已经存在,所以您只需要包含,如下所示
org.apache.maven.plugins
maven-compiler-plugin
3.1
${java.version}
${java.version}
com/flint/demo/BatchJob.java
现在,当您执行mvn清理包并检查jar文件时,您不应该看到BatchJob类文件。
$ jar tf flint-demo-1.0-SNAPSHOT.jar
META-INF/MANIFEST.MF
META-INF/
com/
com/flint/
com/flint/demo/
com/flint/demo/StreamingJob.class
log4j.properties
META-INF/maven/
META-INF/maven/com.flint.demo/
META-INF/maven/com.flint.demo/flint-demo/
META-INF/maven/com.flint.demo/flint-demo/pom.xml
META-INF/maven/com.flint.demo/flint-demo/pom.properties
要了解更多有关Maven编译器插件的信息,请访问此处