开发者

Maven. How to include specific folder or file when assemblying project depending on is it dev build or production?

Using 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>

in descriptor.xml file we can specify

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

Is it possible to include specific file from this folder or sub-folder depending on profile? Or some other way...

Like this:

<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>

But it puts resources in jar when packaging. But we need to put it in zip when assemblying as I already mentioned above :( Thanks!


If your resources have a pattern (say *.properties) then you can do something like this in your assembly descriptor file:

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

This copies all *.properties from your target folder to the root folder of your assembly zip. Based on the profile in your pom.xml which is being run, only appropriate resources will be present in the target folder.


Place the executions of the plugin in every profile, inside tag 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>
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜