気軽に楽しくプログラムと遊ぶ

自分が興味があってためになるかもって思う情報を提供しています。

Maven設定(Javaバージョン指定、複数プロジェクト管理)

Maven設定は、ライブラリの依存関係追加ぐらいしか、触ることがなかったが必要が
設定構成がイマイチなプロジェクトを見直す必要が出てきたので、よくわかっていなかった設定について
いくつかまとめてみます。

環境

  • Java 1.6と1.8が混在
  • Maven 3.6.1
  • Eclipse 4.8 Photon
  • 複数プロジェクトが存在し、依存関係あり

1. Javaバージョン指定方法

Mavenコンパイル時や実行時のJavaバージョンの指定が可能です。
Mavenで指定すると、Eclipse側のビルドパスよりも設定が優先されます。

Javaバージョンの指定は、JAVA_HOMEバージョンとmaven-compiler-pluginで指定するJavaバージョンは合わせる必要があります。
もし、異なる場合は、JAVA_HOME指定バージョンの方が新しい状態にしておく必要がありそうです。

pom.xml pluginタグで指定

<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
      <source>1.8</source>
      <target>1.8</target>
    </configuration>
  </plugin>
<plugins>

Maven3系であれば、maven-compiler-pluginのプロパティーで以下のように指定することもできます。

pom.xml propertiesタグで指定

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.source>1.8</maven.compiler.source>
</properties>

Spring Bootで指定する場合は、以下になります。

pom.xml Spring Bootにおいて、propertiesタグで指定

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <failOnMissingWebXml>false</failOnMissingWebXml> <!-- web.xml省略時に出る警告を消す -->
</properties>

2. マルチモジュール・プロジェクトを管理する

互いに依存関係のあるプロジェクトを順番にビルドしてビルドモジュールを作成したい場合があります。
この時、自動ビルドでは予期した順にビルドされず、ビルドに失敗してしまいます。

この場合は、packagingをpomにしたビルド専用プロジェクトを用意することで、
意図した順序でビルドを実行できます。

test_webプロジェクトがtest_dbプロジェクトに依存している際に、test_db → test_webの順で
ビルドするようにpom.xmlに以下のように設定します。

pom.xml (test_pomプロジェクト)

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>test_pom</groupId>
  <artifactId>test_pom</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <modules>
    <module>../test_db</module>
    <module>../test_web</module>
  </modules>
</project>

pom.xml (test_dbプロジェクト)

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>test_db</groupId>
  <artifactId>test_db</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <parent>
    <groupId>test_pom</groupId>
    <artifactId>test_pom</artifactId>
    <version>1.0.0-SNAPSHOT</version>
  </parent>
</project>

pom.xml (test_webプロジェクト)

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>test_web</groupId>
  <artifactId>test_web</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  ...
  <dependencies>
   ...
   <dependency>
     <groupId>test_db</groupId>
     <artifactId>test_db</artifactId>
     <version>1.0.0-SNAPSHOT</version>
   </dependency>
   ...
  </dependencies>
  ...

  <parent>
    <groupId>test_pom</groupId>
    <artifactId>test_pom</artifactId>
    <version>1.0.0-SNAPSHOT</version>
  </parent>
</project>