Search code examples
javamaven-2maven-assembly-plugin

Using maven to output the version number to a text file


I want to generate a zip file that will update an application with maven. The zip will be hosted on a server and I am using the assembly plugin to generate the zip. However I would like maven to automatically generate a text file that stores the current version number outside the zip. How is this possible?

EDIT: I successfully did it using the maven Assembly Plugin and two descriptors to create two custom assemblies. One has a directory-single goal and it just creates a folder with the updated version.txt based on filtering. Then another one with a single goal actually packages the zip file. This seems to be very inelegant and I guess it will not properly update the maven repo with the whole updated folder. If there is a better way to do this, please let me know.


Solution

  • Sure. Create a text file somewhere in src/main/resources, call it version.txt (or whatever)

    File content:

    ${project.version}
    

    now in your pom.xml, inside the build element, put this block:

    <build>
      <resources>
        <resource>
          <directory>src/main/resources</directory>
          <filtering>true</filtering>
          <includes>
            <include>**/version.txt</include>
          </includes>
        </resource>
        <resource>
          <directory>src/main/resources</directory>
          <filtering>false</filtering>
          <excludes>
            <exclude>**/version.txt</exclude>
          </excludes>
        </resource>
        ...
      </resources>
    </build>
    

    after every build, the file (which you can find in target/classes) will contain the current version.

    Now if you want to move the file somewhere else automatically, you are probably going to need to execute an ant task via the maven-antrun-plugin.

    Something like this:

      <build>
        ...
        <plugins>
          <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
             <version>1.4</version>
             <executions>
              <execution>
                <phase>process-resources</phase>
                <configuration>
                   <tasks>
                     <copy file="${project.build.outputDirectory}/version.txt"
                       toFile="..." overwrite="true" />
                  </tasks>
                </configuration>
                <goals>
                  <goal>run</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
       </plugins>
     </build>