In my last post I decribed the way to build and deploy a war file to Tomcat application server with Ant.
In this post I show how to deploy the build war file to Tomcat application server with Maven.
Create inside the "ant" folder this Maven file:
4.0.0 deringo myApp 0.0.1-SNAPSHOT war myApp myApp Maven deployment 1.8 8.5.33 UTF-8 org.apache.tomcat tomcat-catalina ${tomcat.version} provided org.apache.maven.plugins maven-compiler-plugin 3.8.0 ${java.version} org.apache.maven.plugins maven-war-plugin 3.2.2 false myApp myApp org.apache.tomcat.maven tomcat7-maven-plugin 2.2 http://myAppServer:7011/manager/text tomcat tomcat dist/myApp.war /myApp true
Execute with goal: tomcat7:deploy
Use Properties file
In my ANT file I have used a properties file for tomcat username/password etc. In my Maven script I want also to use this properties file.
Unfortunatly Maven can not handle property files out of the box. But there is a Plugin we can use:
org.codehaus.mojo properties-maven-plugin 1.0-alpha-1 initialize read-project-properties tomcat.properties
This is the same, as writing this directly into pom.xml:
tomcat tomcat
The complete pom.xml with properties:
4.0.0 deringo myApp 0.0.1-SNAPSHOT war myApp myApp Maven deployment 1.8 8.5.33 UTF-8 org.apache.tomcat tomcat-catalina ${tomcat.version} provided org.codehaus.mojo properties-maven-plugin 1.0-alpha-1 initialize read-project-properties tomcat.properties org.apache.maven.plugins maven-compiler-plugin 3.8.0 ${java.version} org.apache.maven.plugins maven-war-plugin 3.2.2 false myApp myApp org.apache.tomcat.maven tomcat7-maven-plugin 2.2 ${tomcat.manager.url} ${tomcat.username} ${tomcat.password} dist/myApp.war ${webapp.name} true
Update 2021-03-24
I tried the configuration in a project but got this error:
Plugin execution not covered by lifecycle configuration: org.codehaus.mojo:properties-maven-plugin:1.0-alpha-1:read-project-properties (execution: default, phase: initialize)
I solved the error adding a pluginManagement tag:
... ... ....
But this solution seems more like a workaround when reading the discussion on stackoverflow.
...need to search further...
Use in Jenkins
I have not tried it, but it should be possible to set an environment variable in Jenkins build step to execute with a configurable filename.
For example TOMCAT_PROPERTIES=jenkins-home/secret/tomcat-dev.properties.
And we can use it in Maven script this way:
${env.TOMCAT_PROPERTIES}