You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by "Marvin Froeder (JIRA)" <ji...@codehaus.org> on 2012/07/16 18:54:21 UTC

[jira] (MENFORCER-136) New enforcer for environment variables

Marvin Froeder created MENFORCER-136:
----------------------------------------

             Summary: New enforcer for environment variables
                 Key: MENFORCER-136
                 URL: https://jira.codehaus.org/browse/MENFORCER-136
             Project: Maven 2.x Enforcer Plugin
          Issue Type: New Feature
          Components: Standard Rules
            Reporter: Marvin Froeder


I made this rule for my project, but I think it would be a nice inclusion from the project.

This is particularly useful when running integration tests that needs application server, like when using arquillian + jboss (http://arquillian.org/guides/getting_started/#test_across_containers)

{noformat}
Index: enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractPropertyEnforcerRule.java
===================================================================
--- enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractPropertyEnforcerRule.java	(revision 0)
+++ enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractPropertyEnforcerRule.java	(revision 0)
@@ -0,0 +1,82 @@
+package org.apache.maven.plugins.enforcer;
+
+import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
+import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
+
+/**
+ * Abstract enforcer rule that give a foundation to validate properties from multiple sources.
+ * 
+ * @author Paul Gier
+ * @author <a href='mailto:marvin[at]marvinformatics[dot]com'>Marvin Froeder</a>
+ * @version $Id: AbstractPropertyEnforcerRule.java $
+ */
+public abstract class AbstractPropertyEnforcerRule
+    extends AbstractNonCacheableEnforcerRule
+{
+
+    /**
+     * Match the property value to a given regular expression. Defaults to <code>null</code> (any value is ok).
+     */
+    public String regex = null;
+
+    /** Specify a warning message if the regular expression is not matched. */
+    public String regexMessage = null;
+
+    public AbstractPropertyEnforcerRule()
+    {
+        super();
+    }
+
+    /**
+     * Execute the rule.
+     * 
+     * @param helper the helper
+     * @throws EnforcerRuleException the enforcer rule exception
+     */
+    public void execute( EnforcerRuleHelper helper )
+        throws EnforcerRuleException
+    {
+        Object propValue = resolveValue( helper );
+
+        // Check that the property is not null or empty string
+        if ( propValue == null )
+        {
+            if ( message == null )
+            {
+                message = getName() + " \"" + getPropertyName() + "\" is required for this build.";
+            }
+            throw new EnforcerRuleException( message );
+        }
+        // If there is a regex, check that the property matches it
+        if ( regex != null && !propValue.toString().matches( regex ) )
+        {
+            if ( regexMessage == null )
+            {
+                regexMessage =
+                    getName() + " \"" + getPropertyName() + "\" evaluates to \"" + propValue + "\".  "
+                        + "This does not match the regular expression \"" + regex + "\"";
+            }
+            throw new EnforcerRuleException( regexMessage );
+        }
+    }
+
+    /**
+     * How the property that is being evaluated is called
+     */
+    public abstract String getName();
+
+    /**
+     * The name of the property currently being evaluated, this is used for default message pourpouses only
+     */
+    public abstract String getPropertyName();
+
+    /**
+     * Resolves the property value
+     * 
+     * @param helper
+     * @throws EnforcerRuleException
+     */
+    public abstract Object resolveValue( EnforcerRuleHelper helper )
+        throws EnforcerRuleException;
+
+}
\ No newline at end of file
Index: enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireEnvironmentVariable.java
===================================================================
--- enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireEnvironmentVariable.java	(revision 0)
+++ enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireEnvironmentVariable.java	(revision 0)
@@ -0,0 +1,73 @@
+package org.apache.maven.plugins.enforcer;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.enforcer.rule.api.EnforcerRule;
+import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
+
+/**
+ * This rule checks that certain environment variable is set.
+ * 
+ * @author <a href='mailto:marvin[at]marvinformatics[dot]com'>Marvin Froeder</a>
+ */
+public class RequireEnvironmentVariable
+    extends AbstractPropertyEnforcerRule
+{
+
+    /** Specify the required variable. */
+    public String variableName = null;
+
+    @Override
+    public String resolveValue( EnforcerRuleHelper helper )
+    {
+        String envValue = System.getenv( variableName );
+        return envValue;
+    }
+
+    public boolean isCacheable()
+    {
+        // environment variables won't change while maven is on the run
+        return true;
+    }
+
+    public boolean isResultValid( EnforcerRule cachedRule )
+    {
+        // this rule shall always have the same result, since environment
+        // variables are set before maven is launched
+        return true;
+    }
+
+    public String getCacheId()
+    {
+        return variableName;
+    }
+
+    @Override
+    public String getPropertyName()
+    {
+        return variableName;
+    }
+
+    @Override
+    public String getName()
+    {
+        return "Environment variable";
+    }
+}
Index: enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireProperty.java
===================================================================
--- enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireProperty.java	(revision 1362071)
+++ enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireProperty.java	(working copy)
@@ -25,29 +25,18 @@
 
 /**
  * This rule checks that certain properties are set.
- *
+ * 
  * @author Paul Gier
  */
 public class RequireProperty
-    extends AbstractNonCacheableEnforcerRule
+    extends AbstractPropertyEnforcerRule
 {
 
     /** Specify the required property. */
     public String property = null;
 
-    /** Match the property value to a given regular expression. Defaults to <code>null</code> (any value is ok). */
-    public String regex = null;
-
-    /** Specify a warning message if the regular expression is not matched. */
-    public String regexMessage = null;
-
-    /**
-     * Execute the rule.
-     *
-     * @param helper the helper
-     * @throws EnforcerRuleException the enforcer rule exception
-     */
-    public void execute( EnforcerRuleHelper helper )
+    @Override
+    public Object resolveValue( EnforcerRuleHelper helper )
         throws EnforcerRuleException
     {
         Object propValue = null;
@@ -59,26 +48,23 @@
         {
             throw new EnforcerRuleException( "Unable to evaluate property: " + property, eee );
         }
+        return propValue;
+    }
 
-        // Check that the property is not null or empty string
-        if ( propValue == null )
-        {
-            if ( message == null )
-            {
-                message = "Property \"" + property + "\" is required for this build.";
-            }
-            throw new EnforcerRuleException( message );
-        }
-        // If there is a regex, check that the property matches it
-        if ( regex != null && !propValue.toString().matches( regex ) )
-        {
-            if ( regexMessage == null )
-            {
-                regexMessage =
-                    "Property \"" + property + "\" evaluates to \"" + propValue + "\".  " +
-                        "This does not match the regular expression \"" + regex + "\"";
-            }
-            throw new EnforcerRuleException( regexMessage );
-        }
+    protected String resolveValue()
+    {
+        return null;
     }
+
+    @Override
+    public String getPropertyName()
+    {
+        return property;
+    }
+
+    @Override
+    public String getName()
+    {
+        return "Property";
+    }
 }
Index: enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireEnvironmentVariable.java
===================================================================
--- enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireEnvironmentVariable.java	(revision 0)
+++ enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireEnvironmentVariable.java	(revision 0)
@@ -0,0 +1,112 @@
+package org.apache.maven.plugins.enforcer;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
+import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
+
+/**
+ * Unit test for {@link RequireEnvironmentVariable}}
+ *
+ * @author <a href='mailto:marvin[at]marvinformatics[dot]com'>Marvin Froeder</a>
+ */
+public class TestRequireEnvironmentVariable
+    extends TestCase
+{
+
+    /**
+     * Test rule.
+     *
+     * @throws EnforcerRuleException the enforcer rule exception
+     */
+    public void testRule()
+        throws EnforcerRuleException
+    {
+        MockProject project = new MockProject();
+        project.setProperty( "testProp", "This is a test." );
+        EnforcerRuleHelper helper = EnforcerTestUtils.getHelper( project );
+
+        RequireEnvironmentVariable rule = new RequireEnvironmentVariable();
+        // this env variable should not be set
+        rule.variableName = "JUNK";
+
+        try
+        {
+            rule.execute( helper );
+            fail( "Expected an exception." );
+        }
+        catch ( EnforcerRuleException e )
+        {
+            // expected to catch this.
+        }
+
+        // PATH shall be common to windows and linux
+        rule.variableName = "PATH";
+        try
+        {
+            rule.execute( helper );
+        }
+        catch ( EnforcerRuleException e )
+        {
+            fail( "This should not throw an exception" );
+        }
+    }
+
+    /**
+     * Test rule with regex.
+     *
+     * @throws EnforcerRuleException the enforcer rule exception
+     */
+    public void testRuleWithRegex()
+        throws EnforcerRuleException
+    {
+        EnforcerRuleHelper helper = EnforcerTestUtils.getHelper();
+
+        RequireEnvironmentVariable rule = new RequireEnvironmentVariable();
+        rule.variableName = "PATH";
+        // This expression should not match the property
+        // value
+        rule.regex = "[^abc]";
+
+        try
+        {
+            rule.execute( helper );
+            fail( "Expected an exception." );
+        }
+        catch ( EnforcerRuleException e )
+        {
+            // expected to catch this.
+        }
+
+        // can't really predict what a PATH will looks like, just enforce it ain't empty
+        rule.regex = ".{1,}";
+        try
+        {
+            rule.execute( helper );
+        }
+        catch ( EnforcerRuleException e )
+        {
+            fail( "This should not throw an exception" );
+        }
+    }
+
+}
Index: pom.xml
===================================================================
--- pom.xml	(revision 1362071)
+++ pom.xml	(working copy)
@@ -48,6 +48,13 @@
     </developer>
   </developers>
 
+  <contributors>
+    <contributor>
+      <name>Marvin Froeder</name>
+      <email>marvin@marvinformatics.com</email>
+    </contributor>
+  </contributors>
+
   <mailingLists>
     <mailingList>
       <name>Maven User List</name>
@@ -262,6 +269,33 @@
             <tagBase>https://svn.apache.org/repos/asf/maven/enforcer/tags</tagBase>
           </configuration>
         </plugin>
+        <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
+        <plugin>
+        	<groupId>org.eclipse.m2e</groupId>
+        	<artifactId>lifecycle-mapping</artifactId>
+        	<version>1.0.0</version>
+        	<configuration>
+        		<lifecycleMappingMetadata>
+        			<pluginExecutions>
+        				<pluginExecution>
+        					<pluginExecutionFilter>
+        						<groupId>org.codehaus.plexus</groupId>
+        						<artifactId>
+        							plexus-maven-plugin
+        						</artifactId>
+        						<versionRange>[1.3.8,)</versionRange>
+        						<goals>
+        							<goal>descriptor</goal>
+        						</goals>
+        					</pluginExecutionFilter>
+        					<action>
+        						<ignore></ignore>
+        					</action>
+        				</pluginExecution>
+        			</pluginExecutions>
+        		</lifecycleMappingMetadata>
+        	</configuration>
+        </plugin>
       </plugins>
     </pluginManagement>
   </build>
{noformat}


--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://jira.codehaus.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] (MENFORCER-136) New enforcer for environment variables

Posted by "Olivier Lamy (JIRA)" <ji...@codehaus.org>.
    [ https://jira.codehaus.org/browse/MENFORCER-136?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=307823#comment-307823 ] 

Olivier Lamy commented on MENFORCER-136:
----------------------------------------

https://github.com/apache/maven-enforcer/pull/3
                
> New enforcer for environment variables
> --------------------------------------
>
>                 Key: MENFORCER-136
>                 URL: https://jira.codehaus.org/browse/MENFORCER-136
>             Project: Maven 2.x Enforcer Plugin
>          Issue Type: New Feature
>          Components: Standard Rules
>            Reporter: Marvin Froeder
>
> I made this rule for my project, but I think it would be a nice inclusion from the project.
> This is particularly useful when running integration tests that needs application server, like when using arquillian + jboss (http://arquillian.org/guides/getting_started/#test_across_containers)
> {noformat}
> Index: enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractPropertyEnforcerRule.java
> ===================================================================
> --- enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractPropertyEnforcerRule.java	(revision 0)
> +++ enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractPropertyEnforcerRule.java	(revision 0)
> @@ -0,0 +1,82 @@
> +package org.apache.maven.plugins.enforcer;
> +
> +import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
> +import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
> +
> +/**
> + * Abstract enforcer rule that give a foundation to validate properties from multiple sources.
> + * 
> + * @author Paul Gier
> + * @author <a href='mailto:marvin[at]marvinformatics[dot]com'>Marvin Froeder</a>
> + * @version $Id: AbstractPropertyEnforcerRule.java $
> + */
> +public abstract class AbstractPropertyEnforcerRule
> +    extends AbstractNonCacheableEnforcerRule
> +{
> +
> +    /**
> +     * Match the property value to a given regular expression. Defaults to <code>null</code> (any value is ok).
> +     */
> +    public String regex = null;
> +
> +    /** Specify a warning message if the regular expression is not matched. */
> +    public String regexMessage = null;
> +
> +    public AbstractPropertyEnforcerRule()
> +    {
> +        super();
> +    }
> +
> +    /**
> +     * Execute the rule.
> +     * 
> +     * @param helper the helper
> +     * @throws EnforcerRuleException the enforcer rule exception
> +     */
> +    public void execute( EnforcerRuleHelper helper )
> +        throws EnforcerRuleException
> +    {
> +        Object propValue = resolveValue( helper );
> +
> +        // Check that the property is not null or empty string
> +        if ( propValue == null )
> +        {
> +            if ( message == null )
> +            {
> +                message = getName() + " \"" + getPropertyName() + "\" is required for this build.";
> +            }
> +            throw new EnforcerRuleException( message );
> +        }
> +        // If there is a regex, check that the property matches it
> +        if ( regex != null && !propValue.toString().matches( regex ) )
> +        {
> +            if ( regexMessage == null )
> +            {
> +                regexMessage =
> +                    getName() + " \"" + getPropertyName() + "\" evaluates to \"" + propValue + "\".  "
> +                        + "This does not match the regular expression \"" + regex + "\"";
> +            }
> +            throw new EnforcerRuleException( regexMessage );
> +        }
> +    }
> +
> +    /**
> +     * How the property that is being evaluated is called
> +     */
> +    public abstract String getName();
> +
> +    /**
> +     * The name of the property currently being evaluated, this is used for default message pourpouses only
> +     */
> +    public abstract String getPropertyName();
> +
> +    /**
> +     * Resolves the property value
> +     * 
> +     * @param helper
> +     * @throws EnforcerRuleException
> +     */
> +    public abstract Object resolveValue( EnforcerRuleHelper helper )
> +        throws EnforcerRuleException;
> +
> +}
> \ No newline at end of file
> Index: enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireEnvironmentVariable.java
> ===================================================================
> --- enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireEnvironmentVariable.java	(revision 0)
> +++ enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireEnvironmentVariable.java	(revision 0)
> @@ -0,0 +1,73 @@
> +package org.apache.maven.plugins.enforcer;
> +
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one
> + * or more contributor license agreements.  See the NOTICE file
> + * distributed with this work for additional information
> + * regarding copyright ownership.  The ASF licenses this file
> + * to you under the Apache License, Version 2.0 (the
> + * "License"); you may not use this file except in compliance
> + * with the License.  You may obtain a copy of the License at
> + *
> + *  http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing,
> + * software distributed under the License is distributed on an
> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> + * KIND, either express or implied.  See the License for the
> + * specific language governing permissions and limitations
> + * under the License.
> + */
> +
> +import org.apache.maven.enforcer.rule.api.EnforcerRule;
> +import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
> +
> +/**
> + * This rule checks that certain environment variable is set.
> + * 
> + * @author <a href='mailto:marvin[at]marvinformatics[dot]com'>Marvin Froeder</a>
> + */
> +public class RequireEnvironmentVariable
> +    extends AbstractPropertyEnforcerRule
> +{
> +
> +    /** Specify the required variable. */
> +    public String variableName = null;
> +
> +    @Override
> +    public String resolveValue( EnforcerRuleHelper helper )
> +    {
> +        String envValue = System.getenv( variableName );
> +        return envValue;
> +    }
> +
> +    public boolean isCacheable()
> +    {
> +        // environment variables won't change while maven is on the run
> +        return true;
> +    }
> +
> +    public boolean isResultValid( EnforcerRule cachedRule )
> +    {
> +        // this rule shall always have the same result, since environment
> +        // variables are set before maven is launched
> +        return true;
> +    }
> +
> +    public String getCacheId()
> +    {
> +        return variableName;
> +    }
> +
> +    @Override
> +    public String getPropertyName()
> +    {
> +        return variableName;
> +    }
> +
> +    @Override
> +    public String getName()
> +    {
> +        return "Environment variable";
> +    }
> +}
> Index: enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireProperty.java
> ===================================================================
> --- enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireProperty.java	(revision 1362071)
> +++ enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireProperty.java	(working copy)
> @@ -25,29 +25,18 @@
>  
>  /**
>   * This rule checks that certain properties are set.
> - *
> + * 
>   * @author Paul Gier
>   */
>  public class RequireProperty
> -    extends AbstractNonCacheableEnforcerRule
> +    extends AbstractPropertyEnforcerRule
>  {
>  
>      /** Specify the required property. */
>      public String property = null;
>  
> -    /** Match the property value to a given regular expression. Defaults to <code>null</code> (any value is ok). */
> -    public String regex = null;
> -
> -    /** Specify a warning message if the regular expression is not matched. */
> -    public String regexMessage = null;
> -
> -    /**
> -     * Execute the rule.
> -     *
> -     * @param helper the helper
> -     * @throws EnforcerRuleException the enforcer rule exception
> -     */
> -    public void execute( EnforcerRuleHelper helper )
> +    @Override
> +    public Object resolveValue( EnforcerRuleHelper helper )
>          throws EnforcerRuleException
>      {
>          Object propValue = null;
> @@ -59,26 +48,23 @@
>          {
>              throw new EnforcerRuleException( "Unable to evaluate property: " + property, eee );
>          }
> +        return propValue;
> +    }
>  
> -        // Check that the property is not null or empty string
> -        if ( propValue == null )
> -        {
> -            if ( message == null )
> -            {
> -                message = "Property \"" + property + "\" is required for this build.";
> -            }
> -            throw new EnforcerRuleException( message );
> -        }
> -        // If there is a regex, check that the property matches it
> -        if ( regex != null && !propValue.toString().matches( regex ) )
> -        {
> -            if ( regexMessage == null )
> -            {
> -                regexMessage =
> -                    "Property \"" + property + "\" evaluates to \"" + propValue + "\".  " +
> -                        "This does not match the regular expression \"" + regex + "\"";
> -            }
> -            throw new EnforcerRuleException( regexMessage );
> -        }
> +    protected String resolveValue()
> +    {
> +        return null;
>      }
> +
> +    @Override
> +    public String getPropertyName()
> +    {
> +        return property;
> +    }
> +
> +    @Override
> +    public String getName()
> +    {
> +        return "Property";
> +    }
>  }
> Index: enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireEnvironmentVariable.java
> ===================================================================
> --- enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireEnvironmentVariable.java	(revision 0)
> +++ enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireEnvironmentVariable.java	(revision 0)
> @@ -0,0 +1,112 @@
> +package org.apache.maven.plugins.enforcer;
> +
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one
> + * or more contributor license agreements.  See the NOTICE file
> + * distributed with this work for additional information
> + * regarding copyright ownership.  The ASF licenses this file
> + * to you under the Apache License, Version 2.0 (the
> + * "License"); you may not use this file except in compliance
> + * with the License.  You may obtain a copy of the License at
> + *
> + *  http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing,
> + * software distributed under the License is distributed on an
> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> + * KIND, either express or implied.  See the License for the
> + * specific language governing permissions and limitations
> + * under the License.
> + */
> +
> +import junit.framework.TestCase;
> +
> +import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
> +import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
> +
> +/**
> + * Unit test for {@link RequireEnvironmentVariable}}
> + *
> + * @author <a href='mailto:marvin[at]marvinformatics[dot]com'>Marvin Froeder</a>
> + */
> +public class TestRequireEnvironmentVariable
> +    extends TestCase
> +{
> +
> +    /**
> +     * Test rule.
> +     *
> +     * @throws EnforcerRuleException the enforcer rule exception
> +     */
> +    public void testRule()
> +        throws EnforcerRuleException
> +    {
> +        MockProject project = new MockProject();
> +        project.setProperty( "testProp", "This is a test." );
> +        EnforcerRuleHelper helper = EnforcerTestUtils.getHelper( project );
> +
> +        RequireEnvironmentVariable rule = new RequireEnvironmentVariable();
> +        // this env variable should not be set
> +        rule.variableName = "JUNK";
> +
> +        try
> +        {
> +            rule.execute( helper );
> +            fail( "Expected an exception." );
> +        }
> +        catch ( EnforcerRuleException e )
> +        {
> +            // expected to catch this.
> +        }
> +
> +        // PATH shall be common to windows and linux
> +        rule.variableName = "PATH";
> +        try
> +        {
> +            rule.execute( helper );
> +        }
> +        catch ( EnforcerRuleException e )
> +        {
> +            fail( "This should not throw an exception" );
> +        }
> +    }
> +
> +    /**
> +     * Test rule with regex.
> +     *
> +     * @throws EnforcerRuleException the enforcer rule exception
> +     */
> +    public void testRuleWithRegex()
> +        throws EnforcerRuleException
> +    {
> +        EnforcerRuleHelper helper = EnforcerTestUtils.getHelper();
> +
> +        RequireEnvironmentVariable rule = new RequireEnvironmentVariable();
> +        rule.variableName = "PATH";
> +        // This expression should not match the property
> +        // value
> +        rule.regex = "[^abc]";
> +
> +        try
> +        {
> +            rule.execute( helper );
> +            fail( "Expected an exception." );
> +        }
> +        catch ( EnforcerRuleException e )
> +        {
> +            // expected to catch this.
> +        }
> +
> +        // can't really predict what a PATH will looks like, just enforce it ain't empty
> +        rule.regex = ".{1,}";
> +        try
> +        {
> +            rule.execute( helper );
> +        }
> +        catch ( EnforcerRuleException e )
> +        {
> +            fail( "This should not throw an exception" );
> +        }
> +    }
> +
> +}
> Index: pom.xml
> ===================================================================
> --- pom.xml	(revision 1362071)
> +++ pom.xml	(working copy)
> @@ -48,6 +48,13 @@
>      </developer>
>    </developers>
>  
> +  <contributors>
> +    <contributor>
> +      <name>Marvin Froeder</name>
> +      <email>marvin@marvinformatics.com</email>
> +    </contributor>
> +  </contributors>
> +
>    <mailingLists>
>      <mailingList>
>        <name>Maven User List</name>
> @@ -262,6 +269,33 @@
>              <tagBase>https://svn.apache.org/repos/asf/maven/enforcer/tags</tagBase>
>            </configuration>
>          </plugin>
> +        <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
> +        <plugin>
> +        	<groupId>org.eclipse.m2e</groupId>
> +        	<artifactId>lifecycle-mapping</artifactId>
> +        	<version>1.0.0</version>
> +        	<configuration>
> +        		<lifecycleMappingMetadata>
> +        			<pluginExecutions>
> +        				<pluginExecution>
> +        					<pluginExecutionFilter>
> +        						<groupId>org.codehaus.plexus</groupId>
> +        						<artifactId>
> +        							plexus-maven-plugin
> +        						</artifactId>
> +        						<versionRange>[1.3.8,)</versionRange>
> +        						<goals>
> +        							<goal>descriptor</goal>
> +        						</goals>
> +        					</pluginExecutionFilter>
> +        					<action>
> +        						<ignore></ignore>
> +        					</action>
> +        				</pluginExecution>
> +        			</pluginExecutions>
> +        		</lifecycleMappingMetadata>
> +        	</configuration>
> +        </plugin>
>        </plugins>
>      </pluginManagement>
>    </build>
> {noformat}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://jira.codehaus.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] (MENFORCER-136) New enforcer for environment variables

Posted by "Olivier Lamy (JIRA)" <ji...@codehaus.org>.
     [ https://jira.codehaus.org/browse/MENFORCER-136?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Olivier Lamy closed MENFORCER-136.
----------------------------------

       Resolution: Fixed
    Fix Version/s: 1.2
         Assignee: Olivier Lamy

applied.
Thanks!
                
> New enforcer for environment variables
> --------------------------------------
>
>                 Key: MENFORCER-136
>                 URL: https://jira.codehaus.org/browse/MENFORCER-136
>             Project: Maven 2.x Enforcer Plugin
>          Issue Type: New Feature
>          Components: Standard Rules
>            Reporter: Marvin Froeder
>            Assignee: Olivier Lamy
>             Fix For: 1.2
>
>
> I made this rule for my project, but I think it would be a nice inclusion from the project.
> This is particularly useful when running integration tests that needs application server, like when using arquillian + jboss (http://arquillian.org/guides/getting_started/#test_across_containers)
> {noformat}
> Index: enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractPropertyEnforcerRule.java
> ===================================================================
> --- enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractPropertyEnforcerRule.java	(revision 0)
> +++ enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractPropertyEnforcerRule.java	(revision 0)
> @@ -0,0 +1,82 @@
> +package org.apache.maven.plugins.enforcer;
> +
> +import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
> +import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
> +
> +/**
> + * Abstract enforcer rule that give a foundation to validate properties from multiple sources.
> + * 
> + * @author Paul Gier
> + * @author <a href='mailto:marvin[at]marvinformatics[dot]com'>Marvin Froeder</a>
> + * @version $Id: AbstractPropertyEnforcerRule.java $
> + */
> +public abstract class AbstractPropertyEnforcerRule
> +    extends AbstractNonCacheableEnforcerRule
> +{
> +
> +    /**
> +     * Match the property value to a given regular expression. Defaults to <code>null</code> (any value is ok).
> +     */
> +    public String regex = null;
> +
> +    /** Specify a warning message if the regular expression is not matched. */
> +    public String regexMessage = null;
> +
> +    public AbstractPropertyEnforcerRule()
> +    {
> +        super();
> +    }
> +
> +    /**
> +     * Execute the rule.
> +     * 
> +     * @param helper the helper
> +     * @throws EnforcerRuleException the enforcer rule exception
> +     */
> +    public void execute( EnforcerRuleHelper helper )
> +        throws EnforcerRuleException
> +    {
> +        Object propValue = resolveValue( helper );
> +
> +        // Check that the property is not null or empty string
> +        if ( propValue == null )
> +        {
> +            if ( message == null )
> +            {
> +                message = getName() + " \"" + getPropertyName() + "\" is required for this build.";
> +            }
> +            throw new EnforcerRuleException( message );
> +        }
> +        // If there is a regex, check that the property matches it
> +        if ( regex != null && !propValue.toString().matches( regex ) )
> +        {
> +            if ( regexMessage == null )
> +            {
> +                regexMessage =
> +                    getName() + " \"" + getPropertyName() + "\" evaluates to \"" + propValue + "\".  "
> +                        + "This does not match the regular expression \"" + regex + "\"";
> +            }
> +            throw new EnforcerRuleException( regexMessage );
> +        }
> +    }
> +
> +    /**
> +     * How the property that is being evaluated is called
> +     */
> +    public abstract String getName();
> +
> +    /**
> +     * The name of the property currently being evaluated, this is used for default message pourpouses only
> +     */
> +    public abstract String getPropertyName();
> +
> +    /**
> +     * Resolves the property value
> +     * 
> +     * @param helper
> +     * @throws EnforcerRuleException
> +     */
> +    public abstract Object resolveValue( EnforcerRuleHelper helper )
> +        throws EnforcerRuleException;
> +
> +}
> \ No newline at end of file
> Index: enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireEnvironmentVariable.java
> ===================================================================
> --- enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireEnvironmentVariable.java	(revision 0)
> +++ enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireEnvironmentVariable.java	(revision 0)
> @@ -0,0 +1,73 @@
> +package org.apache.maven.plugins.enforcer;
> +
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one
> + * or more contributor license agreements.  See the NOTICE file
> + * distributed with this work for additional information
> + * regarding copyright ownership.  The ASF licenses this file
> + * to you under the Apache License, Version 2.0 (the
> + * "License"); you may not use this file except in compliance
> + * with the License.  You may obtain a copy of the License at
> + *
> + *  http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing,
> + * software distributed under the License is distributed on an
> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> + * KIND, either express or implied.  See the License for the
> + * specific language governing permissions and limitations
> + * under the License.
> + */
> +
> +import org.apache.maven.enforcer.rule.api.EnforcerRule;
> +import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
> +
> +/**
> + * This rule checks that certain environment variable is set.
> + * 
> + * @author <a href='mailto:marvin[at]marvinformatics[dot]com'>Marvin Froeder</a>
> + */
> +public class RequireEnvironmentVariable
> +    extends AbstractPropertyEnforcerRule
> +{
> +
> +    /** Specify the required variable. */
> +    public String variableName = null;
> +
> +    @Override
> +    public String resolveValue( EnforcerRuleHelper helper )
> +    {
> +        String envValue = System.getenv( variableName );
> +        return envValue;
> +    }
> +
> +    public boolean isCacheable()
> +    {
> +        // environment variables won't change while maven is on the run
> +        return true;
> +    }
> +
> +    public boolean isResultValid( EnforcerRule cachedRule )
> +    {
> +        // this rule shall always have the same result, since environment
> +        // variables are set before maven is launched
> +        return true;
> +    }
> +
> +    public String getCacheId()
> +    {
> +        return variableName;
> +    }
> +
> +    @Override
> +    public String getPropertyName()
> +    {
> +        return variableName;
> +    }
> +
> +    @Override
> +    public String getName()
> +    {
> +        return "Environment variable";
> +    }
> +}
> Index: enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireProperty.java
> ===================================================================
> --- enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireProperty.java	(revision 1362071)
> +++ enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireProperty.java	(working copy)
> @@ -25,29 +25,18 @@
>  
>  /**
>   * This rule checks that certain properties are set.
> - *
> + * 
>   * @author Paul Gier
>   */
>  public class RequireProperty
> -    extends AbstractNonCacheableEnforcerRule
> +    extends AbstractPropertyEnforcerRule
>  {
>  
>      /** Specify the required property. */
>      public String property = null;
>  
> -    /** Match the property value to a given regular expression. Defaults to <code>null</code> (any value is ok). */
> -    public String regex = null;
> -
> -    /** Specify a warning message if the regular expression is not matched. */
> -    public String regexMessage = null;
> -
> -    /**
> -     * Execute the rule.
> -     *
> -     * @param helper the helper
> -     * @throws EnforcerRuleException the enforcer rule exception
> -     */
> -    public void execute( EnforcerRuleHelper helper )
> +    @Override
> +    public Object resolveValue( EnforcerRuleHelper helper )
>          throws EnforcerRuleException
>      {
>          Object propValue = null;
> @@ -59,26 +48,23 @@
>          {
>              throw new EnforcerRuleException( "Unable to evaluate property: " + property, eee );
>          }
> +        return propValue;
> +    }
>  
> -        // Check that the property is not null or empty string
> -        if ( propValue == null )
> -        {
> -            if ( message == null )
> -            {
> -                message = "Property \"" + property + "\" is required for this build.";
> -            }
> -            throw new EnforcerRuleException( message );
> -        }
> -        // If there is a regex, check that the property matches it
> -        if ( regex != null && !propValue.toString().matches( regex ) )
> -        {
> -            if ( regexMessage == null )
> -            {
> -                regexMessage =
> -                    "Property \"" + property + "\" evaluates to \"" + propValue + "\".  " +
> -                        "This does not match the regular expression \"" + regex + "\"";
> -            }
> -            throw new EnforcerRuleException( regexMessage );
> -        }
> +    protected String resolveValue()
> +    {
> +        return null;
>      }
> +
> +    @Override
> +    public String getPropertyName()
> +    {
> +        return property;
> +    }
> +
> +    @Override
> +    public String getName()
> +    {
> +        return "Property";
> +    }
>  }
> Index: enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireEnvironmentVariable.java
> ===================================================================
> --- enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireEnvironmentVariable.java	(revision 0)
> +++ enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireEnvironmentVariable.java	(revision 0)
> @@ -0,0 +1,112 @@
> +package org.apache.maven.plugins.enforcer;
> +
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one
> + * or more contributor license agreements.  See the NOTICE file
> + * distributed with this work for additional information
> + * regarding copyright ownership.  The ASF licenses this file
> + * to you under the Apache License, Version 2.0 (the
> + * "License"); you may not use this file except in compliance
> + * with the License.  You may obtain a copy of the License at
> + *
> + *  http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing,
> + * software distributed under the License is distributed on an
> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> + * KIND, either express or implied.  See the License for the
> + * specific language governing permissions and limitations
> + * under the License.
> + */
> +
> +import junit.framework.TestCase;
> +
> +import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
> +import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
> +
> +/**
> + * Unit test for {@link RequireEnvironmentVariable}}
> + *
> + * @author <a href='mailto:marvin[at]marvinformatics[dot]com'>Marvin Froeder</a>
> + */
> +public class TestRequireEnvironmentVariable
> +    extends TestCase
> +{
> +
> +    /**
> +     * Test rule.
> +     *
> +     * @throws EnforcerRuleException the enforcer rule exception
> +     */
> +    public void testRule()
> +        throws EnforcerRuleException
> +    {
> +        MockProject project = new MockProject();
> +        project.setProperty( "testProp", "This is a test." );
> +        EnforcerRuleHelper helper = EnforcerTestUtils.getHelper( project );
> +
> +        RequireEnvironmentVariable rule = new RequireEnvironmentVariable();
> +        // this env variable should not be set
> +        rule.variableName = "JUNK";
> +
> +        try
> +        {
> +            rule.execute( helper );
> +            fail( "Expected an exception." );
> +        }
> +        catch ( EnforcerRuleException e )
> +        {
> +            // expected to catch this.
> +        }
> +
> +        // PATH shall be common to windows and linux
> +        rule.variableName = "PATH";
> +        try
> +        {
> +            rule.execute( helper );
> +        }
> +        catch ( EnforcerRuleException e )
> +        {
> +            fail( "This should not throw an exception" );
> +        }
> +    }
> +
> +    /**
> +     * Test rule with regex.
> +     *
> +     * @throws EnforcerRuleException the enforcer rule exception
> +     */
> +    public void testRuleWithRegex()
> +        throws EnforcerRuleException
> +    {
> +        EnforcerRuleHelper helper = EnforcerTestUtils.getHelper();
> +
> +        RequireEnvironmentVariable rule = new RequireEnvironmentVariable();
> +        rule.variableName = "PATH";
> +        // This expression should not match the property
> +        // value
> +        rule.regex = "[^abc]";
> +
> +        try
> +        {
> +            rule.execute( helper );
> +            fail( "Expected an exception." );
> +        }
> +        catch ( EnforcerRuleException e )
> +        {
> +            // expected to catch this.
> +        }
> +
> +        // can't really predict what a PATH will looks like, just enforce it ain't empty
> +        rule.regex = ".{1,}";
> +        try
> +        {
> +            rule.execute( helper );
> +        }
> +        catch ( EnforcerRuleException e )
> +        {
> +            fail( "This should not throw an exception" );
> +        }
> +    }
> +
> +}
> Index: pom.xml
> ===================================================================
> --- pom.xml	(revision 1362071)
> +++ pom.xml	(working copy)
> @@ -48,6 +48,13 @@
>      </developer>
>    </developers>
>  
> +  <contributors>
> +    <contributor>
> +      <name>Marvin Froeder</name>
> +      <email>marvin@marvinformatics.com</email>
> +    </contributor>
> +  </contributors>
> +
>    <mailingLists>
>      <mailingList>
>        <name>Maven User List</name>
> @@ -262,6 +269,33 @@
>              <tagBase>https://svn.apache.org/repos/asf/maven/enforcer/tags</tagBase>
>            </configuration>
>          </plugin>
> +        <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
> +        <plugin>
> +        	<groupId>org.eclipse.m2e</groupId>
> +        	<artifactId>lifecycle-mapping</artifactId>
> +        	<version>1.0.0</version>
> +        	<configuration>
> +        		<lifecycleMappingMetadata>
> +        			<pluginExecutions>
> +        				<pluginExecution>
> +        					<pluginExecutionFilter>
> +        						<groupId>org.codehaus.plexus</groupId>
> +        						<artifactId>
> +        							plexus-maven-plugin
> +        						</artifactId>
> +        						<versionRange>[1.3.8,)</versionRange>
> +        						<goals>
> +        							<goal>descriptor</goal>
> +        						</goals>
> +        					</pluginExecutionFilter>
> +        					<action>
> +        						<ignore></ignore>
> +        					</action>
> +        				</pluginExecution>
> +        			</pluginExecutions>
> +        		</lifecycleMappingMetadata>
> +        	</configuration>
> +        </plugin>
>        </plugins>
>      </pluginManagement>
>    </build>
> {noformat}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://jira.codehaus.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira