Maven.Как включить определенную папку или файл при сборке проекта в зависимости от его разработки или производства? - PullRequest
7 голосов
/ 05 января 2011

Используя maven-assembly-plugin

<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.1</version>
<configuration>
 <descriptors>
  <descriptor>descriptor.xml</descriptor>
 </descriptors>
 <finalName>xxx-impl-${pom.version}</finalName>
 <outputDirectory>target/assembly</outputDirectory>
 <workDirectory>target/assembly/work</workDirectory>
</configuration>

в файле descriptor.xml мы можем указать

    <fileSets>
    <fileSet>
        <directory>src/install</directory>
        <outputDirectory>/</outputDirectory>
    </fileSet>
</fileSets>

Возможно ли включить конкретный файл из этогопапка или подпапка в зависимости от профиля?Или каким-то другим способом ...

Примерно так:

<profiles>
    <profile>
        <id>dev</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <build>
            <resources>
                <resource>
                    <directory>src/install/dev</directory>
                    <includes>
                        <include>**/*</include>
                    </includes>
                </resource>
            </resources>
        </build>
    </profile>
    <profile>
        <id>prod</id>
        <build>
            <resources>
                <resource>
                    <directory>src/install/prod</directory>
                    <includes>
                        <include>**/*</include>
                    </includes>
                </resource>
            </resources>
        </build>
    </profile>
</profiles>

Но это помещает ресурсы в банку при упаковке.Но мы должны поместить его в zip при сборке, как я уже упоминал выше :( Спасибо!

Ответы [ 2 ]

15 голосов
/ 05 января 2011

Если ваши ресурсы имеют шаблон (скажем, *.properties), вы можете сделать что-то подобное в файле дескриптора сборки:

<fileSets>
        <fileSet>
            <directory>${project.build.directory}</directory>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>*.properties</include>
            </includes>
        </fileSet>
</fileSets>

Это копирует все *.properties из вашей папки target в корневую папку вашей сборки zip. В зависимости от используемого профиля в pom.xml в папке target будут присутствовать только соответствующие ресурсы.

2 голосов
/ 05 января 2011

Поместите исполнения плагина в каждом профиле, внутри тега build.

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
          <execution>
            <phase>grr</phase>
            <goals>
              <goal>tree</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.3.1</version>
        <configuration>
          <excludes>
            <exclude>**/*.xml</exclude>
          </excludes>
        </configuration>
      </plugin>

    </plugins>
  </build>
  <profiles>
    <profile>
      <id>dev</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.1</version>
            <configuration>
              <descriptors>
                <descriptor>descriptor.xml</descriptor>
              </descriptors>
              <finalName>xxx-impl-${pom.version}</finalName>
              <outputDirectory>target/assembly</outputDirectory>
              <workDirectory>target/assembly/work</workDirectory>
            </configuration>
          </plugin>
          <resources>
            <resource>
              <directory>src/install/dev</directory>
              <includes>
                <include>**/*</include>
              </includes>
            </resource>
          </resources>
      </build>
    </profile>
    <profile>
      <id>prod</id>
      <build>
        <resources>
          <resource>
            <directory>src/install/prod</directory>
            <includes>
              <include>**/*</include>
            </includes>
          </resource>
        </resources>
      </build>
    </profile>
  </profiles>
...