#maven-2
#maven-2
Вопрос:
Я должен заменить исходный файл Java во время maven compile
, если активен специальный профиль. Я думал о том, чтобы просто исключить файл из стандарта src/main/java/
и включить его из другого исходного каталога, такого как src/main/java2/
.
Но поскольку файлы должны иметь одинаковое имя и пакет, исключение всегда выигрывает, и файл из другого каталога никогда не включается…
Есть какой-нибудь известный рабочий способ сделать это?
Ответ №1:
Я бы использовал плагин Maven Antrun, чтобы переименовать «оригинальный» исходный файл и скопировать «специальный» исходный файл из src/main/java2
в src/main/java
перед compile
этапом. После compile
восстановите исходный файл. Что-то вроде этого (разместите это в профиле):
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<id>replace-source-file</id>
<phase>process-sources</phase>
<configuration>
<tasks>
<move file="src/main/java/com/stackoverflow/App.java" tofile="src/main/java/com/stackoverflow/App.java.moved"/>
<copy file="src/main/java2/com/stackoverflow/App.java" todir="src/main/java/com/stackoverflow/"/>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
<execution>
<id>restore-source-file</id>
<phase>compile</phase>
<configuration>
<tasks>
<move file="src/main/java/com/stackoverflow/App.java.moved" tofile="src/main/java/com/stackoverflow/App.java"/>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
Обновление: Как упоминалось OP в комментарии, у этого подхода есть серьезный недостаток. При ошибке компиляции неправильный исходный файл (и *.java.moved
файл) остается в src/main/java
каталоге. Это проблема.
Более чистой альтернативой было бы переместить обе версии исходного кода в выделенные модули и объявить один или другой модуль как зависимый в зависимости от профиля (обычный артефакт будет включен в активный профиль по умолчанию). Я бы даже не стал связываться с исключениями компилятора. Это сработало бы и было бы чистым.
Комментарии:
1. Спасибо, это работает, но имеет серьезный недостаток: при ошибке компиляции неправильный исходный файл (и файл *.java.moved) остается в каталоге src / main / java.
2. @user385480 Аргххх, действительно, не подумал об этом. Я обновлю свой ответ.
Ответ №2:
Одним из возможных решений было бы скопировать исходные файлы, которые вам действительно нужны, в какой-нибудь временный каталог, например /target/temp/src
, перед выполнением этапа компиляции. Включите только этот каталог в качестве исходного каталога.
Комментарии:
1. Я сам уже думал о чем-то подобном, но это нарушило бы природу проекта eclipse…
2. В таком случае мне интересно, на правильном ли вы пути. Почему бы вам не переместить разные исходные файлы в разные проекты maven, чтобы вы могли включать их в качестве разных зависимостей на основе профиля пользователя?
Ответ №3:
Используйте для этого опцию Maven filter. Найдите применение по следующей ссылке Maven Filter
Комментарии:
1. Извините, но чтение документа (ваша ссылка) Я не вижу, как фильтрация могла бы мне здесь помочь…