Skip to main content

Welcome to Geoff Hayward's Weblog

Commenting on Java, JavaFX, Java EE, Joomla, and IoT.

This post is a note on using Maven's 'maven-antrun-plugin' to replace a variable version number in a Dockerfile with the Maven project's version.

The following code replaces this line ADD ./target/application-@{version}.jar application.jar in a Dockerfile with something like ADD ./target/application-1.2.0-SNAPSHOT.jar application.jar. The processed Dockerfile is then saved in the target folder alongside any other artefacts created by Maven.

<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.8</version>
    <executions>
        <execution>
            <phase>package</phase>
            <configuration>
                <target>
                    <copy file="Dockerfile" todir="${project.build.directory}"/>
                    <replace file="${project.build.directory}/Dockerfile" >
                        <replacefilter token="@{version}" value="${project.version}" />
                    </replace>
                </target>
            </configuration>
            <goals>
                <goal>run</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Once the Dockerfile has been processed a tool such as the Maven 'maven-assembly-plugin' can then package the Dockerfile and other artefacts into a shippable form.

For completeness, here is an example configuration that creates a shippable ZIP ready for AWS's Elastic Beanstalk.

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.0.0</version>
    <executions>
        <execution>
            <id>make-zip</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <appendAssemblyId>false</appendAssemblyId>
        <descriptors>
            <descriptor>assembly.xml</descriptor>
        </descriptors>
    </configuration>
</plugin>

And here is the corresponding example of the 'filesSets' element from an assembly.xml.

<fileSets>
    <fileSet>
        <directory>${project.build.directory}</directory>
        <includes>
            <include>${project.build.finalName}.jar</include>
        </includes>
        <outputDirectory>target</outputDirectory>
    </fileSet>
    <fileSet>
        <directory>${project.build.directory}</directory>
        <includes>
            <include>Dockerfile</include>
        </includes>
        <outputDirectory>.</outputDirectory>
    </fileSet>
    <fileSet>
        <directory>${basedir}</directory>
        <includes>
            <-- other stuff from the base directory -->
        </includes>
        <outputDirectory>.</outputDirectory>
    </fileSet>
</fileSets>

I hope this helps you.



Read

Here is a handy way of deleting Docker containers using GREP.

docker rm -f $(docker ps | grep <grep term> | awk ‘{print $1}’)

And here is a handy way of deleting Docker images using GREP.

docker rmi -f $(docker images | grep <grep term> | awk ‘{print $3}’)


Read

Mailing List


Responsive Media

With the ResponsiveMedia plugin for Joomla it is easy to add 3rd party content from YouTube, Vimeo, and Instagram right in to any Joomla! article.

ResponsiveMedia