diff --git a/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractRunMojo.java b/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractRunMojo.java
index e971fda..cc2c0c5 100644
--- a/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractRunMojo.java
+++ b/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractRunMojo.java
@@ -98,19 +98,19 @@
     /**
      * Used to look up Artifacts in the remote repository.
      */
-    @Component( role = ArtifactFactory.class )
+    @Component(role = ArtifactFactory.class)
     protected ArtifactFactory artifactFactory;
 
     /**
      * Location of the local repository.
      */
-    @Parameter( defaultValue = "${localRepository}", required = true, readonly = true )
+    @Parameter(defaultValue = "${localRepository}", required = true, readonly = true)
     private ArtifactRepository artifactRepository;
 
     /**
      * Used to look up Artifacts in the remote repository.
      */
-    @Component( role = ArtifactResolver.class )
+    @Component(role = ArtifactResolver.class)
     protected ArtifactResolver artifactResolver;
 
     // ----------------------------------------------------------------------
@@ -120,27 +120,27 @@
     /**
      * The packaging of the Maven project that this goal operates upon.
      */
-    @Parameter( defaultValue = "${project.packaging}", required = true, readonly = true )
+    @Parameter(defaultValue = "${project.packaging}", required = true, readonly = true)
     private String packaging;
 
     /**
      * The directory to create the Tomcat server configuration under.
      */
-    @Parameter( defaultValue = "${project.build.directory}/tomcat" )
+    @Parameter(defaultValue = "${project.build.directory}/tomcat")
     private File configurationDir;
 
     /**
      * The port to run the Tomcat server on.
      */
-    @Parameter( property = "maven.tomcat.port", defaultValue = "8080" )
+    @Parameter(property = "maven.tomcat.port", defaultValue = "8080")
     private int port;
 
     /**
-     *
      * this IP address will be used on all ports.
+     *
      * @since 2.2
      */
-    @Parameter( property = "maven.tomcat.address")
+    @Parameter(property = "maven.tomcat.address")
     private String address;
 
     /**
@@ -150,7 +150,7 @@
      *
      * @since 2.0
      */
-    @Parameter( property = "maven.tomcat.ajp.port", defaultValue = "0" )
+    @Parameter(property = "maven.tomcat.ajp.port", defaultValue = "0")
     private int ajpPort;
 
     /**
@@ -160,7 +160,7 @@
      *
      * @since 2.0
      */
-    @Parameter( property = "maven.tomcat.ajp.protocol", defaultValue = "ajp" )
+    @Parameter(property = "maven.tomcat.ajp.protocol", defaultValue = "ajp")
     private String ajpProtocol;
 
     /**
@@ -170,9 +170,9 @@
      *
      * @since 1.0
      */
-    @Parameter( property = "maven.tomcat.httpsPort", defaultValue = "0" )
+    @Parameter(property = "maven.tomcat.httpsPort", defaultValue = "0")
     private int httpsPort;
-    
+
     /**
      * The max post size to run the Tomcat server on.
      * By default it's 2097152 bytes. That's the default Tomcat configuration.
@@ -180,7 +180,7 @@
      *
      * @since 2.3
      */
-    @Parameter( property = "maven.tomcat.maxPostSize", defaultValue = "2097152" )
+    @Parameter(property = "maven.tomcat.maxPostSize", defaultValue = "2097152")
     private int maxPostSize;
 
     /**
@@ -188,7 +188,7 @@
      *
      * @since 1.0
      */
-    @Parameter( property = "maven.tomcat.uriEncoding", defaultValue = "ISO-8859-1" )
+    @Parameter(property = "maven.tomcat.uriEncoding", defaultValue = "ISO-8859-1")
     private String uriEncoding;
 
     /**
@@ -204,7 +204,7 @@
      *
      * @since 1.0-alpha-2
      */
-    @Parameter( property = "maven.tomcat.additionalConfigFilesDir", defaultValue = "${basedir}/src/main/tomcatconf" )
+    @Parameter(property = "maven.tomcat.additionalConfigFilesDir", defaultValue = "${basedir}/src/main/tomcatconf")
     private File additionalConfigFilesDir;
 
     /**
@@ -212,7 +212,7 @@
      *
      * @since 1.0-alpha-2
      */
-    @Parameter( property = "maven.tomcat.serverXml" )
+    @Parameter(property = "maven.tomcat.serverXml")
     private File serverXml;
 
     /**
@@ -221,7 +221,7 @@
      *
      * @since 1.0-alpha-2
      */
-    @Parameter( property = "maven.tomcat.webXml" )
+    @Parameter(property = "maven.tomcat.webXml")
     private File tomcatWebXml;
 
     /**
@@ -230,7 +230,7 @@
      *
      * @since 1.0
      */
-    @Parameter( property = "maven.tomcat.fork", defaultValue = "false" )
+    @Parameter(property = "maven.tomcat.fork", defaultValue = "false")
     private boolean fork;
 
     /**
@@ -245,7 +245,7 @@
      * @since 1.0
      * @deprecated use webapps instead
      */
-    @Parameter( property = "maven.tomcat.addContextWarDependencies", defaultValue = "false" )
+    @Parameter(property = "maven.tomcat.addContextWarDependencies", defaultValue = "false")
     private boolean addContextWarDependencies;
 
     /**
@@ -261,7 +261,7 @@
      *
      * @since 1.0
      */
-    @Component( role = ArchiverManager.class )
+    @Component(role = ArchiverManager.class)
     private ArchiverManager archiverManager;
 
     /**
@@ -269,13 +269,13 @@
      *
      * @since 1.0
      */
-    @Parameter( property = "tomcat.useSeparateTomcatClassLoader", defaultValue = "false" )
+    @Parameter(property = "tomcat.useSeparateTomcatClassLoader", defaultValue = "false")
     protected boolean useSeparateTomcatClassLoader;
 
     /**
      * @since 1.0
      */
-    @Parameter( defaultValue = "${plugin.artifacts}", required = true )
+    @Parameter(defaultValue = "${plugin.artifacts}", required = true)
     private List<Artifact> pluginArtifacts;
 
     /**
@@ -283,7 +283,7 @@
      *
      * @since 1.0
      */
-    @Parameter( property = "tomcat.ignorePackaging", defaultValue = "false" )
+    @Parameter(property = "tomcat.ignorePackaging", defaultValue = "false")
     private boolean ignorePackaging;
 
     /**
@@ -307,7 +307,7 @@
      *
      * @since 2.0
      */
-    @Parameter( defaultValue = "JKS" )
+    @Parameter(defaultValue = "JKS")
     private String keystoreType;
 
     /**
@@ -356,7 +356,7 @@
      * @see <a href="http://tomcat.apache.org/tomcat-6.0-doc/api/org/apache/catalina/startup/Embedded.html">org.apache.catalina.startup.Embedded</a>
      * @since 2.0
      */
-    @Parameter( property = "maven.tomcat.useNaming", defaultValue = "true" )
+    @Parameter(property = "maven.tomcat.useNaming", defaultValue = "true")
     private boolean useNaming;
 
     /**
@@ -366,7 +366,7 @@
      *
      * @since 2.0
      */
-    @Parameter( property = "maven.tomcat.contextReloadable", defaultValue = "false" )
+    @Parameter(property = "maven.tomcat.contextReloadable", defaultValue = "false")
     protected boolean contextReloadable;
 
     /**
@@ -374,13 +374,13 @@
      *
      * @see <a href="http://tomcat.apache.org/tomcat-6.0-doc/config/context.html">http://tomcat.apache.org/tomcat-6.0-doc/config/context.html</a>
      */
-    @Parameter( property = "maven.tomcat.backgroundProcessorDelay", defaultValue = "-1" )
+    @Parameter(property = "maven.tomcat.backgroundProcessorDelay", defaultValue = "-1")
     protected int backgroundProcessorDelay = -1;
 
     /**
      * The path of the Tomcat context XML file.
      */
-    @Parameter( defaultValue = "src/main/webapp/META-INF/context.xml" )
+    @Parameter(defaultValue = "src/main/webapp/META-INF/context.xml")
     protected File contextFile;
 
     /**
@@ -391,13 +391,13 @@
      *
      * @since 2.0
      */
-    @Parameter( property = "maven.tomcat.protocol", defaultValue = "HTTP/1.1" )
+    @Parameter(property = "maven.tomcat.protocol", defaultValue = "HTTP/1.1")
     private String protocol;
 
     /**
      * The path of the Tomcat users XML file.
      */
-    @Parameter( property = "maven.tomcat.tomcatUsers.file" )
+    @Parameter(property = "maven.tomcat.tomcatUsers.file")
     private File tomcatUsers;
 
     /**
@@ -414,7 +414,7 @@
      *
      * @since 2.0
      */
-    @Parameter( property = "maven.tomcat.skip", defaultValue = "false" )
+    @Parameter(property = "maven.tomcat.skip", defaultValue = "false")
     protected boolean skip;
 
     /**
@@ -429,7 +429,7 @@
      *
      * @since 2.1
      */
-    @Parameter( property = "maven.tomcat.hostName", defaultValue = "localhost" )
+    @Parameter(property = "maven.tomcat.hostName", defaultValue = "localhost")
     protected String hostName;
 
     /**
@@ -455,7 +455,7 @@
      *
      * @since 2.0
      */
-    @Parameter( property = "maven.tomcat.staticContextPath", defaultValue = "/" )
+    @Parameter(property = "maven.tomcat.staticContextPath", defaultValue = "/")
     private String staticContextPath;
 
     /**
@@ -464,7 +464,7 @@
      *
      * @since 2.0
      */
-    @Parameter( property = "maven.tomcat.staticContextDocbase" )
+    @Parameter(property = "maven.tomcat.staticContextDocbase")
     private String staticContextDocbase;
 
     /**
@@ -478,13 +478,13 @@
     /**
      * @since 2.2
      */
-    @Parameter( property = "maven.tomcat.useBodyEncodingForURI", defaultValue = "false" )
+    @Parameter(property = "maven.tomcat.useBodyEncodingForURI", defaultValue = "false")
     protected boolean useBodyEncodingForURI;
 
-    @Parameter( defaultValue = "${session}", readonly = true, required = true )
+    @Parameter(defaultValue = "${session}", readonly = true, required = true)
     protected MavenSession session;
 
-    @Component( role = MavenFileFilter.class, hint = "default" )
+    @Component(role = MavenFileFilter.class, hint = "default")
     protected MavenFileFilter mavenFileFilter;
 
     // ----------------------------------------------------------------------
@@ -921,7 +921,7 @@
 
                 // create http connector
                 Connector httpConnector = container.createConnector( (InetAddress) null, port, protocol );
-                httpConnector.setMaxPostSize(maxPostSize);
+                httpConnector.setMaxPostSize( maxPostSize );
                 if ( httpsPort > 0 )
                 {
                     httpConnector.setRedirectPort( httpsPort );
@@ -929,7 +929,7 @@
                 httpConnector.setURIEncoding( uriEncoding );
                 httpConnector.setUseBodyEncodingForURI( this.useBodyEncodingForURI );
 
-                if ( address != null)
+                if ( address != null )
                 {
                     httpConnector.setAttribute( "address", address );
                 }
@@ -941,7 +941,7 @@
                 {
                     Connector httpsConnector = container.createConnector( (InetAddress) null, httpsPort, true );
                     httpsConnector.setSecure( true );
-                    httpsConnector.setMaxPostSize(maxPostSize);
+                    httpsConnector.setMaxPostSize( maxPostSize );
                     httpsConnector.setProperty( "SSLEnabled", "true" );
                     // should be default but configure it anyway
                     httpsConnector.setProperty( "sslProtocol", "TLS" );
@@ -980,7 +980,7 @@
 
                     httpsConnector.setUseBodyEncodingForURI( this.useBodyEncodingForURI );
 
-                    if ( address != null)
+                    if ( address != null )
                     {
                         httpsConnector.setAttribute( "address", address );
                     }
@@ -995,7 +995,7 @@
                     Connector ajpConnector = container.createConnector( (InetAddress) null, ajpPort, ajpProtocol );
                     ajpConnector.setURIEncoding( uriEncoding );
                     ajpConnector.setUseBodyEncodingForURI( this.useBodyEncodingForURI );
-                    if ( address != null)
+                    if ( address != null )
                     {
                         ajpConnector.setAttribute( "address", address );
                     }
@@ -1063,7 +1063,7 @@
         }
     }
 
-    @SuppressWarnings( "unchecked" )
+    @SuppressWarnings("unchecked")
     public Set<Artifact> getProjectArtifacts()
     {
         return project.getArtifacts();
@@ -1132,7 +1132,7 @@
         List<Context> contexts = new ArrayList<Context>();
 
         ScopeArtifactFilter filter = new ScopeArtifactFilter( "tomcat" );
-        @SuppressWarnings( "unchecked" ) Set<Artifact> artifacts = project.getArtifacts();
+        @SuppressWarnings("unchecked") Set<Artifact> artifacts = project.getArtifacts();
         for ( Artifact artifact : artifacts )
         {
             // Artifact is not yet registered and it has neither test, nor a
diff --git a/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/run/AbstractRunMojo.java b/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/run/AbstractRunMojo.java
index 3e5f0bb..db16a00 100644
--- a/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/run/AbstractRunMojo.java
+++ b/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/run/AbstractRunMojo.java
@@ -118,7 +118,7 @@
     /**
      * Location of the local repository.
      */
-    @Parameter( defaultValue = "${localRepository}", required = true, readonly = true )
+    @Parameter(defaultValue = "${localRepository}", required = true, readonly = true)
     private ArtifactRepository local;
 
     /**
@@ -134,28 +134,28 @@
     /**
      * The packaging of the Maven project that this goal operates upon.
      */
-    @Parameter( defaultValue = "${project.packaging}", required = true, readonly = true )
+    @Parameter(defaultValue = "${project.packaging}", required = true, readonly = true)
     private String packaging;
 
     /**
      * The directory to create the Tomcat server configuration under.
      */
-    @Parameter( defaultValue = "${project.build.directory}/tomcat" )
+    @Parameter(defaultValue = "${project.build.directory}/tomcat")
     private File configurationDir;
 
     /**
      * The port to run the Tomcat server on.
      * Will be exposed as System props and session.executionProperties with key tomcat.maven.http.port
      */
-    @Parameter( property = "maven.tomcat.port", defaultValue = "8080" )
+    @Parameter(property = "maven.tomcat.port", defaultValue = "8080")
     private int port;
 
     /**
-     *
      * this IP address will be used on all ports
+     *
      * @since 2.2
      */
-    @Parameter( property = "maven.tomcat.address")
+    @Parameter(property = "maven.tomcat.address")
     private String address;
 
     /**
@@ -166,7 +166,7 @@
      *
      * @since 2.0
      */
-    @Parameter( property = "maven.tomcat.ajp.port", defaultValue = "0" )
+    @Parameter(property = "maven.tomcat.ajp.port", defaultValue = "0")
     private int ajpPort;
 
     /**
@@ -181,7 +181,7 @@
      *
      * @since 2.0
      */
-    @Parameter( property = "maven.tomcat.ajp.protocol", defaultValue = "org.apache.coyote.ajp.AjpProtocol" )
+    @Parameter(property = "maven.tomcat.ajp.protocol", defaultValue = "org.apache.coyote.ajp.AjpProtocol")
     private String ajpProtocol;
 
     /**
@@ -192,7 +192,7 @@
      *
      * @since 1.0
      */
-    @Parameter( property = "maven.tomcat.httpsPort", defaultValue = "0" )
+    @Parameter(property = "maven.tomcat.httpsPort", defaultValue = "0")
     private int httpsPort;
 
     /**
@@ -202,15 +202,15 @@
      *
      * @since 2.3
      */
-    @Parameter( property = "maven.tomcat.maxPostSize", defaultValue = "2097152" )
+    @Parameter(property = "maven.tomcat.maxPostSize", defaultValue = "2097152")
     private int maxPostSize;
-    
+
     /**
      * The character encoding to use for decoding URIs.
      *
      * @since 1.0
      */
-    @Parameter( property = "maven.tomcat.uriEncoding", defaultValue = "ISO-8859-1" )
+    @Parameter(property = "maven.tomcat.uriEncoding", defaultValue = "ISO-8859-1")
     private String uriEncoding;
 
     /**
@@ -226,7 +226,7 @@
      *
      * @since 1.0-alpha-2
      */
-    @Parameter( property = "maven.tomcat.additionalConfigFilesDir", defaultValue = "${basedir}/src/main/tomcatconf" )
+    @Parameter(property = "maven.tomcat.additionalConfigFilesDir", defaultValue = "${basedir}/src/main/tomcatconf")
     private File additionalConfigFilesDir;
 
     /**
@@ -234,7 +234,7 @@
      *
      * @since 1.0-alpha-2
      */
-    @Parameter( property = "maven.tomcat.serverXml" )
+    @Parameter(property = "maven.tomcat.serverXml")
     private File serverXml;
 
     /**
@@ -243,7 +243,7 @@
      *
      * @since 1.0-alpha-2
      */
-    @Parameter( property = "maven.tomcat.webXml" )
+    @Parameter(property = "maven.tomcat.webXml")
     private File tomcatWebXml;
 
     /**
@@ -252,7 +252,7 @@
      *
      * @since 1.0
      */
-    @Parameter( property = "maven.tomcat.fork", defaultValue = "false" )
+    @Parameter(property = "maven.tomcat.fork", defaultValue = "false")
     private boolean fork;
 
     /**
@@ -267,7 +267,7 @@
      * @since 1.0
      * @deprecated use webapps instead
      */
-    @Parameter( property = "maven.tomcat.addContextWarDependencies", defaultValue = "false" )
+    @Parameter(property = "maven.tomcat.addContextWarDependencies", defaultValue = "false")
     private boolean addContextWarDependencies;
 
     /**
@@ -291,13 +291,13 @@
      *
      * @since 1.0
      */
-    @Parameter( property = "tomcat.useSeparateTomcatClassLoader", defaultValue = "false" )
+    @Parameter(property = "tomcat.useSeparateTomcatClassLoader", defaultValue = "false")
     protected boolean useSeparateTomcatClassLoader;
 
     /**
      * @since 1.0
      */
-    @Parameter( defaultValue = "${plugin.artifacts}", required = true )
+    @Parameter(defaultValue = "${plugin.artifacts}", required = true)
     private List<Artifact> pluginArtifacts;
 
     /**
@@ -305,7 +305,7 @@
      *
      * @since 1.0
      */
-    @Parameter( property = "tomcat.ignorePackaging", defaultValue = "false" )
+    @Parameter(property = "tomcat.ignorePackaging", defaultValue = "false")
     private boolean ignorePackaging;
 
     /**
@@ -329,7 +329,7 @@
      *
      * @since 2.0
      */
-    @Parameter( defaultValue = "JKS" )
+    @Parameter(defaultValue = "JKS")
     private String keystoreType;
 
     /**
@@ -345,7 +345,7 @@
      * @see <a href="http://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/startup/Tomcat.html">org.apache.catalina.startup.Tomcat</a>
      * @since 2.0
      */
-    @Parameter( property = "maven.tomcat.useNaming", defaultValue = "true" )
+    @Parameter(property = "maven.tomcat.useNaming", defaultValue = "true")
     private boolean useNaming;
 
     /**
@@ -355,7 +355,7 @@
      *
      * @since 2.0
      */
-    @Parameter( property = "maven.tomcat.contextReloadable", defaultValue = "false" )
+    @Parameter(property = "maven.tomcat.contextReloadable", defaultValue = "false")
     protected boolean contextReloadable;
 
     /**
@@ -363,7 +363,7 @@
      *
      * @see <a href="http://tomcat.apache.org/tomcat-7.0-doc/config/context.html">http://tomcat.apache.org/tomcat-7.0-doc/config/context.html</a>
      */
-    @Parameter( property = "maven.tomcat.backgroundProcessorDelay", defaultValue = "-1" )
+    @Parameter(property = "maven.tomcat.backgroundProcessorDelay", defaultValue = "-1")
     protected int backgroundProcessorDelay = -1;
 
 
@@ -372,7 +372,7 @@
      * <p>Since release 2.0, the file is filtered as a maven resource so you can use
      * interpolation tokens ${ }</p>
      */
-    @Parameter( property = "maven.tomcat.contextFile" )
+    @Parameter(property = "maven.tomcat.contextFile")
     protected File contextFile;
 
     /**
@@ -381,8 +381,8 @@
      * contextFile will be sent to Tomcat, resulting in the latter's default
      * context configuration being used instead.
      */
-    @Parameter( defaultValue = "${project.build.directory}/${project.build.finalName}/META-INF/context.xml",
-                readonly = true )
+    @Parameter(defaultValue = "${project.build.directory}/${project.build.finalName}/META-INF/context.xml",
+               readonly = true)
     private File defaultContextFile;
 
     /**
@@ -393,7 +393,7 @@
      *
      * @since 2.0
      */
-    @Parameter( property = "maven.tomcat.protocol", defaultValue = "HTTP/1.1" )
+    @Parameter(property = "maven.tomcat.protocol", defaultValue = "HTTP/1.1")
     private String protocol;
 
     /**
@@ -401,7 +401,7 @@
      *
      * @since 2.0
      */
-    @Parameter( property = "maven.tomcat.tomcatUsers.file" )
+    @Parameter(property = "maven.tomcat.tomcatUsers.file")
     private File tomcatUsers;
 
     /**
@@ -409,7 +409,7 @@
      *
      * @since 2.0
      */
-    @Parameter( property = "maven.tomcat.tomcatLogging.file" )
+    @Parameter(property = "maven.tomcat.tomcatLogging.file")
     private File tomcatLoggingFile;
 
     /**
@@ -417,12 +417,13 @@
      *
      * @since 2.0
      */
-    @Parameter( property = "maven.tomcat.skip", defaultValue = "false" )
+    @Parameter(property = "maven.tomcat.skip", defaultValue = "false")
     protected boolean skip;
 
     /**
      * Collection of webapp artifacts to be deployed. Elements are &lt;webapp&gt; and contain
      * usual GAVC plus contextPath and/or contextFile elements.<p>
+     *
      * @see {@link Webapp}
      * @since 2.0
      */
@@ -434,7 +435,7 @@
      *
      * @since 2.0
      */
-    @Parameter( property = "maven.tomcat.staticContextPath", defaultValue = "/" )
+    @Parameter(property = "maven.tomcat.staticContextPath", defaultValue = "/")
     private String staticContextPath;
 
     /**
@@ -443,7 +444,7 @@
      *
      * @since 2.0
      */
-    @Parameter( property = "maven.tomcat.staticContextDocbase" )
+    @Parameter(property = "maven.tomcat.staticContextDocbase")
     private String staticContextDocbase;
 
     /**
@@ -454,14 +455,14 @@
     @Parameter
     protected String classLoaderClass;
 
-    @Parameter( defaultValue = "${session}", readonly = true, required = true )
+    @Parameter(defaultValue = "${session}", readonly = true, required = true)
     protected MavenSession session;
 
     /**
      * Will dump port in a properties file (see ports for property names).
      * If empty no file generated
      */
-    @Parameter( property = "maven.tomcat.propertiesPortFilePath" )
+    @Parameter(property = "maven.tomcat.propertiesPortFilePath")
     protected String propertiesPortFilePath;
 
     /**
@@ -469,7 +470,7 @@
      *
      * @since 2.0
      */
-    @Parameter( property = "maven.tomcat.hostName", defaultValue = "localhost" )
+    @Parameter(property = "maven.tomcat.hostName", defaultValue = "localhost")
     protected String hostName;
 
     /**
@@ -487,10 +488,10 @@
      *
      * @since 2.1
      */
-    @Parameter( property = "maven.tomcat.https.clientAuth", defaultValue = "false" )
+    @Parameter(property = "maven.tomcat.https.clientAuth", defaultValue = "false")
     protected String clientAuth = "false";
 
-    @Component( role = MavenFileFilter.class, hint = "default" )
+    @Component(role = MavenFileFilter.class, hint = "default")
     protected MavenFileFilter mavenFileFilter;
 
 
@@ -500,60 +501,52 @@
      *
      * @since 2.2
      */
-    @Parameter( property = "maven.tomcat.jarScan.allDirectories", defaultValue = "true" )
+    @Parameter(property = "maven.tomcat.jarScan.allDirectories", defaultValue = "true")
     protected boolean jarScanAllDirectories = true;
 
     /**
-     *
      * @since 2.2
      */
-    @Parameter( property = "maven.tomcat.useBodyEncodingForURI", defaultValue = "false" )
+    @Parameter(property = "maven.tomcat.useBodyEncodingForURI", defaultValue = "false")
     protected boolean useBodyEncodingForURI;
 
     /**
-     *
      * @since 2.2
      */
     @Parameter
     protected String trustManagerClassName;
 
     /**
-     *
      * @since 2.2
      */
     @Parameter
     protected String trustMaxCertLength;
 
     /**
-     *
      * @since 2.2
      */
     @Parameter
     protected String truststoreAlgorithm;
 
     /**
-     *
      * @since 2.2
      */
     @Parameter
     protected String truststoreFile;
 
     /**
-     *
      * @since 2.2
      */
     @Parameter
-    protected String  truststorePass;
+    protected String truststorePass;
 
     /**
-     *
      * @since 2.2
      */
     @Parameter
     protected String truststoreProvider;
 
     /**
-     *
      * @since 2.2
      */
     @Parameter
@@ -1123,14 +1116,14 @@
 
                 Connector connector = new Connector( protocol );
                 connector.setPort( port );
-                connector.setMaxPostSize(maxPostSize);
+                connector.setMaxPostSize( maxPostSize );
 
                 if ( httpsPort > 0 )
                 {
                     connector.setRedirectPort( httpsPort );
                 }
 
-                if ( address != null)
+                if ( address != null )
                 {
                     connector.setAttribute( "address", address );
                 }
@@ -1154,7 +1147,7 @@
                 {
                     httpsConnector = new Connector( protocol );
                     httpsConnector.setPort( httpsPort );
-                    httpsConnector.setMaxPostSize(maxPostSize);
+                    httpsConnector.setMaxPostSize( maxPostSize );
                     httpsConnector.setSecure( true );
                     httpsConnector.setProperty( "SSLEnabled", "true" );
                     // should be default but configure it anyway
@@ -1172,38 +1165,37 @@
                         httpsConnector.setAttribute( "keystoreType", keystoreType );
                     }
 
-                    if( trustManagerClassName != null )
+                    if ( trustManagerClassName != null )
                     {
                         httpsConnector.setAttribute( "trustManagerClassName", trustManagerClassName );
                     }
 
-                    if( trustMaxCertLength != null )
+                    if ( trustMaxCertLength != null )
                     {
                         httpsConnector.setAttribute( "trustMaxCertLength", trustMaxCertLength );
                     }
 
-                    if( truststoreAlgorithm != null )
+                    if ( truststoreAlgorithm != null )
                     {
                         httpsConnector.setAttribute( "truststoreAlgorithm", truststoreAlgorithm );
                     }
 
-                    if( truststoreFile != null )
+                    if ( truststoreFile != null )
                     {
                         httpsConnector.setAttribute( "truststoreFile", truststoreFile );
                     }
 
-                    if( truststorePass != null )
+                    if ( truststorePass != null )
                     {
                         httpsConnector.setAttribute( "truststorePass", truststorePass );
                     }
 
-                    if( truststoreProvider != null )
+                    if ( truststoreProvider != null )
                     {
                         httpsConnector.setAttribute( "truststoreProvider", truststoreProvider );
                     }
 
-
-                    if( truststoreType != null )
+                    if ( truststoreType != null )
                     {
                         httpsConnector.setAttribute( "truststoreType", truststoreType );
                     }
@@ -1212,7 +1204,7 @@
 
                     httpsConnector.setUseBodyEncodingForURI( this.useBodyEncodingForURI );
 
-                    if ( address != null)
+                    if ( address != null )
                     {
                         httpsConnector.setAttribute( "address", address );
                     }
@@ -1229,7 +1221,7 @@
                     ajpConnector.setPort( ajpPort );
                     ajpConnector.setURIEncoding( uriEncoding );
                     ajpConnector.setUseBodyEncodingForURI( this.useBodyEncodingForURI );
-                    if ( address != null)
+                    if ( address != null )
                     {
                         ajpConnector.setAttribute( "address", address );
                     }
@@ -1326,7 +1318,7 @@
             ClassWorld world = new ClassWorld();
             ClassRealm root = world.newRealm( "tomcat", Thread.currentThread().getContextClassLoader() );
 
-            for ( @SuppressWarnings( "rawtypes" ) Iterator i = pluginArtifacts.iterator(); i.hasNext(); )
+            for ( @SuppressWarnings("rawtypes") Iterator i = pluginArtifacts.iterator(); i.hasNext(); )
             {
                 Artifact pluginArtifact = (Artifact) i.next();
                 // add all plugin artifacts see https://issues.apache.org/jira/browse/MTOMCAT-122
@@ -1349,7 +1341,7 @@
         }
     }
 
-    @SuppressWarnings( "unchecked" )
+    @SuppressWarnings("unchecked")
     public Set<Artifact> getProjectArtifacts()
     {
         return project.getArtifacts();
@@ -1418,7 +1410,7 @@
         List<Context> contexts = new ArrayList<Context>();
 
         ScopeArtifactFilter filter = new ScopeArtifactFilter( "tomcat" );
-        @SuppressWarnings( "unchecked" ) Set<Artifact> artifacts = project.getArtifacts();
+        @SuppressWarnings("unchecked") Set<Artifact> artifacts = project.getArtifacts();
         for ( Artifact artifact : artifacts )
         {
 
diff --git a/tomcat7-war-runner/src/main/java/org/apache/tomcat/maven/runner/Tomcat7Runner.java b/tomcat7-war-runner/src/main/java/org/apache/tomcat/maven/runner/Tomcat7Runner.java
index cf3f5d2..abe0b28 100644
--- a/tomcat7-war-runner/src/main/java/org/apache/tomcat/maven/runner/Tomcat7Runner.java
+++ b/tomcat7-war-runner/src/main/java/org/apache/tomcat/maven/runner/Tomcat7Runner.java
@@ -86,7 +86,7 @@
     public int httpPort;
 
     public int httpsPort;
-    
+
     public int maxPostSize = 2097152;
 
     public int ajpPort;
@@ -298,7 +298,7 @@
             {
                 Connector connector = new Connector( connectorHttpProtocol );
                 connector.setPort( httpPort );
-                connector.setMaxPostSize(maxPostSize);
+                connector.setMaxPostSize( maxPostSize );
 
                 if ( httpsPort > 0 )
                 {
@@ -322,7 +322,7 @@
             {
                 Connector httpsConnector = new Connector( connectorHttpProtocol );
                 httpsConnector.setPort( httpsPort );
-                httpsConnector.setMaxPostSize(maxPostSize);
+                httpsConnector.setMaxPostSize( maxPostSize );
                 httpsConnector.setSecure( true );
                 httpsConnector.setProperty( "SSLEnabled", "true" );
                 httpsConnector.setProperty( "sslProtocol", "TLS" );
@@ -585,7 +585,7 @@
 
                 // MTOMCAT-211 ensure parent directories created
                 File parentFile = expandFile.getParentFile();
-                if ( !parentFile.mkdirs() && !parentFile.isDirectory())
+                if ( !parentFile.mkdirs() && !parentFile.isDirectory() )
                 {
                     throw new Exception( "FATAL: impossible to create directories:" + parentFile );
                 }
diff --git a/tomcat7-war-runner/src/main/java/org/apache/tomcat/maven/runner/Tomcat7RunnerCli.java b/tomcat7-war-runner/src/main/java/org/apache/tomcat/maven/runner/Tomcat7RunnerCli.java
index 4806c28..b5d9481 100644
--- a/tomcat7-war-runner/src/main/java/org/apache/tomcat/maven/runner/Tomcat7RunnerCli.java
+++ b/tomcat7-war-runner/src/main/java/org/apache/tomcat/maven/runner/Tomcat7RunnerCli.java
@@ -36,7 +36,7 @@
  * @author Olivier Lamy
  * @since 2.0
  */
-@SuppressWarnings( "static-access" )
+@SuppressWarnings("static-access")
 public class Tomcat7RunnerCli
 {
 
@@ -47,9 +47,10 @@
 
     static Option httpsPort =
         OptionBuilder.withArgName( "httpsPort" ).hasArg().withDescription( "https port to use" ).create( "httpsPort" );
-    
+
     static Option maxPostSize =
-        OptionBuilder.withArgName( "maxPostSize" ).hasArg().withDescription( "max post size to use" ).create( "maxPostSize" );
+        OptionBuilder.withArgName( "maxPostSize" ).hasArg().withDescription( "max post size to use" ).create(
+            "maxPostSize" );
 
     static Option ajpPort =
         OptionBuilder.withArgName( "ajpPort" ).hasArg().withDescription( "ajp port to use" ).create( "ajpPort" );
@@ -100,7 +101,7 @@
         options.addOption( httpPort ).addOption( httpsPort ).addOption( ajpPort ).addOption( serverXmlPath ).addOption(
             resetExtract ).addOption( help ).addOption( debug ).addOption( sysProps ).addOption(
             httpProtocol ).addOption( clientAuth ).addOption( keyAlias ).addOption( obfuscate ).addOption(
-            extractDirectory ).addOption( loggerName ).addOption( uriEncoding ).addOption(maxPostSize);
+            extractDirectory ).addOption( loggerName ).addOption( uriEncoding ).addOption( maxPostSize );
     }
 
 
@@ -143,7 +144,7 @@
         }
 
         String port = tomcat7Runner.runtimeProperties.getProperty( Tomcat7Runner.HTTP_PORT_KEY );
-        if ( port != null)
+        if ( port != null )
         {
             tomcat7Runner.httpPort = Integer.parseInt( port );
         }
@@ -153,7 +154,7 @@
         {
             tomcat7Runner.httpPort = Integer.parseInt( line.getOptionValue( httpPort.getOpt() ) );
         }
-        
+
         if ( line.hasOption( maxPostSize.getOpt() ) )
         {
             tomcat7Runner.maxPostSize = Integer.parseInt( line.getOptionValue( maxPostSize.getOpt() ) );
