Вы можете использовать вариант свойств или явный вариант. Я бы предложил сделать так.
<project..>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<build>
<pluginManagement>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artfiactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
</plugin>
</pluginManagement>
</build>
..
</project>
Обычно я рекомендую пользователям иметь корпоративный pom, который содержит определение версий плагинов (в нашем случае часть pluginManagement
, включая и другие плагины), и в вашем собственном pom вы можете использовать свойства для определения source/target
что построить для этого будет выглядеть так:
<project..>
<parent>
<groupId>com.acme</groupId>
<artfiactId>corporate-pom</artifactId>
<version>3.0.2</version>
</parent>
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
</build>
..
</project>
Вышеприведенные сценарии не являются на 100% правильной причиной, так как выше вы можете использовать части JDK 8 в своем коде (если вы компилируете с JDK 8), что приведет к сбою, если вам потребуется запустить его на JRE 7. Чтобы справиться с этим правильно использовать maven-toolchains и animalsniffer-maven-plugin
Если вы используете JDK 9+, вы должны улучшить свою конфигурацию следующим образом:
<project..>
<properties>
<maven.compiler.release>9</maven.compiler.release>
</properties>
<build>
<pluginManagement>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artfiactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
</plugin>
</pluginManagement>
</build>
..
</project>