Я бы использовал Maven Antrun Plugin , чтобы переименовать «оригинальный» исходный файл и скопировать «специальный» исходный файл из 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>
Обновление: Как упомянуто ФП в комментарии, у этого подхода есть существенный недостаток. В случае ошибки компиляции неверный исходный файл (и файл *.java.moved
) остается в каталоге src/main/java
. Это проблема.
Более чистой альтернативой было бы перемещение обеих версий источника в выделенные модули и объявление того или иного модуля в качестве зависимости в зависимости от профиля (артефакт normal будет включен в активный профиль дефолт). Я бы даже не связывался с исключениями компилятора. Это будет работать и чисто.