Как поделиться файлом фильтра среди модулей Maven2? - PullRequest
6 голосов
/ 07 октября 2009

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

родитель
- filter.properties
- module1
- resource1
- module2
- resource2

так, что когда я собираю parent, он будет применять фильтр к resource1 и resource2 при сборке дочерних модулей.

Если я создам приведенную выше структуру и определю фильтр в POM родителя, сборка завершится неудачно, поскольку она ожидает, что фильтр будет определен в каждом дочернем модуле ... Есть ли простой способ сделать это, который я пропускаю?

Ответы [ 3 ]

4 голосов
/ 07 октября 2009

Я не знаю, является ли это параметром, но вместо определения свойств во внешнем файле вы также можете определить их в разделе свойств вашего pom.xml, и вы получите тот же эффект:

<project>
  ...
  <properties>
    <my.filter.value>hello</my.filter.value>
  </properties>
</project>

Таким образом, определение <properties> в родительском pom должно позволить вам легко фильтровать дочерние модули.

4 голосов
/ 07 октября 2009

В этом ответе описывается, как расширить плагин properties-maven, чтобы разрешить совместное использование файлов свойств между проектами. Если вы используете этот плагин, свойства будут доступны для сборки и, следовательно, могут использоваться при фильтрации ресурсов.

В качестве альтернативы, вы можете указать файл фильтра в качестве вложенного артефакта в некоторой сборке, чтобы он был доступен в репозитории, а затем использовать плагин зависимостей для загрузки файла фильтра и, наконец, указать, что фильтр использует общий файл. 1005 *

Чтобы прикрепить фильтр к родительской сборке, используйте цель присоединения build-helper-maven-plugin :

  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.3</version>
    <executions>
      <execution>
        <id>attach-artifacts</id>
        <phase>package</phase>
        <goals>
          <goal>attach-artifact</goal>
        </goals>
        <configuration>
          <artifacts>
            <artifact>
              <file>src/main/resources/shared-filter.properties</file>
              <type>properties</type>
              <classifier>filter</classifier>
            </artifact>
          </artifacts>
        </configuration>
      </execution>
    </executions>
  </plugin>

Когда проект, содержащий фильтр, развернут, фильтр теперь будет прикреплен к нему.

Чтобы загрузить файл фильтра в ваш проект, используйте цель копирования-зависимостей maven-dependency-plugin , чтобы загрузить файл:

  <plugin>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
      <execution>
        <id>copy</id>
        <phase>generate-sources</phase>
        <goals>
          <goal>copy</goal>
        </goals>
        <configuration>
          <artifactItems>
            <artifactItem>
              <groupId>name.seller.rich</groupId>
              <artifactId>shared</artifactId>
              <version>1.0.0</version>
              <classifier>filter</classifier>
              <type>properties</type>
              <overWrite>false</overWrite>
              <destFileName>shared-filter.properties</destFileName>
            </artifactItem>
          </artifactItems>
          <outputDirectory>
            ${project.build.directory}/filters
          </outputDirectory>
        </configuration>
      </execution>
    </executions>
  </plugin>

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

Затем использовать загруженный фильтр:

<filters>
  <filter>${project.build.directory}/filters/shared-filter.properties</filter>
</filters>
<resources>
  <resource>
    <directory>src/main/resources</directory>
    <filtering>true</filtering>
  </resource>
</resources>
0 голосов
/ 14 октября 2009

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

Поскольку путь зависит от среды (eclipse windows / eclipse linux / buildserver), вы можете поместить префикс пути или его часть в профиль settings.xml

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