maven-compiler-plugin: изменение <outputDirectory> для каждого выполнения
ситуация
У меня есть файлы XML, с которыми мне нужно работать в моем графическом интерфейсе (JavaXF) и в моих JavaStoredProcedures в моей базе данных oracle12c.
В графическом интерфейсе я хочу использовать привязки свойств. Поэтому я настроил maven-jaxb2-plugin
генерировать источники со свойствами.
База данных, с другой стороны, не поддерживает Java8, поэтому настраивается второй execution
для maven-jaxb2-plugin для генерации источников без свойств в другой папке, заканчивающейся двумя папками, содержащими одинаковые Java-классы в одних и тех же пакетах в разных папках.
Итак, что у меня сейчас выглядит так:
project
\-target
\-generated-sources
+-java7
| \-package.with.java.files
| \-Java7-compilabe-sources*
\-java8
\-package.with.java.files
\-Java8-compilabe-sources*
Что я хочу сделать дальше, это скомпилировать две папки target/generated-sources/java7
а также target/generated-sources/java8
в разные выходные папки target/java7/classes
а также target/java8/classes
соответственно в разных исполнениях maven-compiler-plugin.
Но я не могу изменить каталог вывода maven-compiler-plugin для одного выполнения.
Это моя текущая конфигурация плагина maven-compiler-plugin:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<verbose>true</verbose>
<fork>true</fork>
<encoding>ISO-8859-1</encoding>
</configuration>
<executions>
<execution>
<id>java8</id>
<configuration>
<source>1.8</source>
<target>1.8</target>
<executable>${jdk-1.8}/bin/javac</executable>
<compilerVersion>1.8</compilerVersion>
<sourceDirectory>${project.build.directory}/generated-sources/java8</sourceDirectory>
<outputDirectory>${basedir}/target/java8/classes</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
Но из вывода Maven, похоже, он не уважает ни один из <sourceDirectory>
ни <outputDirectory>
:
[INFO] ------------------------------------------------------------------------
[INFO] Building MyProject 6.0.5
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ MyProject ---
[INFO] Deleting /ProjectRoot/target
[INFO]
[INFO] --- maven-jaxb2-plugin:0.13.1:generate (Java8) @ MyProject ---
[INFO] Up-to-date check for source resources [[file:/ProjectRoot/src/main/xsd/parad.xsd, file:/ProjectRoot/src/main/xjb/bindings.xml, file:/ProjectRoot/pom.xml]] and target resources [[]].
[INFO] Sources are not up-to-date, XJC will be executed.
[INFO] Episode file [/ProjectRoot/target\generated-sources\java8\META-INF\sun-jaxb.episode] was augmented with if-exists="true" attributes.
[INFO]
[INFO] --- maven-jaxb2-plugin:0.13.1:generate (Java7) @ MyProject ---
[INFO] Up-to-date check for source resources [[file:/ProjectRoot/src/main/xsd/parad.xsd, file:/ProjectRoot/src/main/xjb/bindings.xml, file:/ProjectRoot/pom.xml]] and target resources [[]].
[INFO] Sources are not up-to-date, XJC will be executed.
[INFO] Episode file [/ProjectRoot/target\generated-sources\java7\META-INF\sun-jaxb.episode] was augmented with if-exists="true" attributes.
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ MyProject ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 1 resource
[INFO] Copying 1 resource
[INFO] Copying 1 resource
[INFO] Copying 1 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ MyProject ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 114 source files to /ProjectRoot/target\classes
Выводы
- подключение компилятора не показывает идентификатор выполнения (как это делает maven-jaxb2-plugin)
- подключение компилятора компилирует оба
target/generated-sources/java7
а такжеtarget/generated-sources/java8
(каждый содержит 57 *.java файлов) хотя<sourceDirectory>
дан вexecution/config
- подключение компилятора компилируется в
target/classes
хотя<outputDirectory>
дан вexecution/config
вопрос
Как заставить Maven скомпилировать каждый из target/generated-sources/java7
а также target/generated-sources/java8
в свою целевую папку отдельно?
Дополнительная информация
$ mvn --version
Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T13:57:37+02:00)
1 ответ
Я решил проблему, вытеснив maven-antrun-plugin.
сначала я отключил компиляцию, исключив все файлы:
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<verbose>true</verbose>
<fork>true</fork>
<encoding>ISO-8859-1</encoding>
<source>1.8</source>
<target>1.8</target>
<executable>${jdk-1.8}/bin/javac</executable>
<compilerVersion>1.8</compilerVersion>
<excludes>
<exclude>**/*.*</exclude>
</excludes>
</configuration>
Я также выключил maven-jar-plugin
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<executions>
<execution>
<id>default-jar</id>
<phase>never</phase>
<configuration>
<finalName>unwanted</finalName>
<classifier>unwanted</classifier>
</configuration>
</execution>
</executions>
Затем я настроил отдельные исполнения в maven-antrun-plugin для компиляции каждой исходной папки и создания отдельных jar- файлов.
Осталось настроить подключаемый модуль maven-deploy-plugin таким образом, чтобы два jar-файла (и их исходные jar-файлы) были правильно размещены в репозитории maven, чтобы их можно было извлекать как зависимости.