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

坚强是说给别人听的谎言 提交于 2019-12-18 04:54:25

问题


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!


回答1:


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.




回答2:


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>


来源:https://stackoverflow.com/questions/4602365/maven-how-to-include-specific-folder-or-file-when-assemblying-project-depending

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!