我使用maven在centos服务器上管理我的自定义flink应用程序。我是java的初学者。
为了构建一个空的项目,我只是按照官方的文档,这意味着我执行了下面的命令:
mvn archetype:generate \
-DarchetypeGroupId=org.apache.flink \
-DarchetypeArtifactId=flink-quickstart-java \
-DarchetypeVersion=1.10.0
它起作用了。我得到一个项目如下:
.
├── pom.xml
├── src
└── main
├── java
│ └── myflink
│ ├── BatchJob.java
│ └── StreamingJob.java
└── resources
└── log4j.properties
之后,我修改文件 StreamingJob.java
举个简单的例子 WordCount
.
然后我执行 mvn clean package
尝试构建我的jar文件。
据我所知,我应该得到两个jar文件,一个用于 BatchJob.java
,另一个是 StreamingJob.java
(以下是 WordCount
).
但是,在执行命令之后 mvn clean package
,我明白了 myflink-1.jar
以及 original-myflink-1.jar
. 我搞不懂它们是什么。而且,看起来 BatchJob.java
以及 StreamingJob.java
有自己的jar文件。
那么文件是什么 myflink-1.jar
? 它是否包含两个java文件?如果我想得到一个jar文件,它只包含 StreamingJob.java
,我该怎么办?
1条答案
按热度按时间wlp8pajw1#
jar文件是用于整个包的,通常聚合java类文件、一些元数据和资源文件。原因是
jar
是因为<packaging>jar</packaging>
在pom.xml中定义。如果你扩大你的jar
你会看到java
在相应包中的类文件。我们看到2的原因
jar
文件是由于添加了maven shade插件。第一个jar
(flint-demo-1.0-SNAPSHOT.jar
)从默认值生成maven jar
插件和另一个(original-flint-demo-1.0-SNAPSHOT.jar
)来自maven shade插件。maven shade插件帮助我们生成uber jar/fat jar。我们还可以控制依赖关系,即包含/排除依赖关系,就像在这个示例flink项目中所做的那样。所以当你跑的时候
mvn clean package
您应该看到一些依赖项被排除在外,如中所定义pom.xml
文件如下所示要了解更多关于maven shade插件的信息,可以点击这里和这里
如果你想排除任何文件,比如说batchjob,你可以使用maven编译器插件。我看到示例项目maven编译器插件已经存在,所以您只需要包含
<excludes>
,类似于下面的内容现在当你这么做的时候
mvn clean package
并检查jar
你不应该看到的文件BatchJob
类文件。要了解更多关于maven编译器插件的信息,请点击这里