Заменить исходный файл в maven compile - PullRequest
3 голосов
/ 07 июля 2010

Я должен заменить исходный файл Java во время maven compile, если активен специальный профиль.Я думал о том, чтобы просто исключить файл из стандартного src/main/java/ и включить его из другого исходного каталога, например src/main/java2/.

Но поскольку файлы должны иметь одинаковое имя и пакет, исключение всегда побеждает, и файлиз другого каталога никогда не включается ...

Любой известный рабочий способ сделать это?

Ответы [ 3 ]

5 голосов
/ 07 июля 2010

Я бы использовал 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 будет включен в активный профиль дефолт). Я бы даже не связывался с исключениями компилятора. Это будет работать и чисто.

1 голос
/ 07 июля 2010

Одним из возможных решений было бы скопировать исходные файлы, которые вам действительно нужны, во временный каталог, например /target/temp/src, перед выполнением фазы компиляции. Включите только этот каталог в качестве исходного каталога.

0 голосов
/ 07 июля 2010

Для этого используйте параметр фильтра Maven.Найдите использование по следующей ссылке Maven Filter

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...