Статьи

Мультивизуальные модули Maven и Java

Вступление

Как правило, проект имеет минимальное требование к версии Java, и это относится ко всем его модулям. Но у каждого правила есть свои исключения, так как недавно я наткнулся на следующую проблему.

Один мой проект с открытым исходным кодом требует Java 1.6 для большинства своих модулей, кроме одного, требующего версию 1.7.

Это происходит при интеграции внешних библиотек с требованиями Java, отличными от вашего собственного проекта.

Поскольку этот один модуль интегрирует среду DBCP2 (поддерживающую, по крайней мере, Java 1.7), мне нужно дать Maven команду использовать два разных компилятора Java.

Переменные среды

Нам нужно определить следующие переменные среды

Имя переменной среды Значение переменной среды
JAVA_HOME_6 C: \ Program Files \ Java \ jdk1.6.0_38
JAVA_HOME_7 C: \ Program Files \ Java \ jdk1.7.0_25
JAVA_HOME % JAVA_HOME_6%

Родитель pom.xml

Родительский pom.xml определяет глобальные настройки версии Java

1
2
3
4
<properties>
    <jdk.version>6</jdk.version>
    <jdk>${env.JAVA_HOME_6}</jdk>
</properties>

Нам нужно указать компилятору и тестовым плагинам использовать настроенную версию Java.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>${jdk.version}</source>
                <target>${jdk.version}</target>
                <showDeprecation>true</showDeprecation>
                <showWarnings>true</showWarnings>
                <executable>${jdk}/bin/javac</executable>
                <fork>true</fork>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <jvm>${jdk}/bin/java</jvm>
                <forkMode>once</forkMode>
            </configuration>
        </plugin>
    </plugins>
</build>

Конкретный модуль pom.xml

Те модули, которым требуется другая версия Java, просто должны переопределить настройки по умолчанию:

1
2
3
4
<properties>
    <jdk.version>7</jdk.version>
    <jdk>${env.JAVA_HOME_7}</jdk>
</properties>

И это все, теперь мы можем создавать каждый модуль, используя свое собственное требование минимальной версии Java.