Ваш jar-файл предназначен для всего вашего пакета, который обычно объединяет java файлов классов, некоторых метаданных, файлов ресурсов. Причина, по которой это jar
, заключается в том, что <packaging>jar</packaging>
определено в pom. xml. Если вы развернете файл jar
, вы увидите оба файла классов java
в соответствующем пакете.
Причина, по которой мы видим файл 2 jar
, связана с добавлением Maven Shade Plugin. Первый 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
, как показано ниже
[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 Compiler Plugin. Я вижу, что в примере проекта плагин компилятора maven уже присутствует, поэтому вам нужно просто включить <excludes>
, что-то вроде ниже
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<excludes>
<exclude>com/flint/demo/BatchJob.java</exclude>
</excludes>
</configuration>
</plugin>
Теперь, когда вы делаете mvn clean package
и проверяете файл 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 Compiler здесь