You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by se...@apache.org on 2013/07/22 17:12:17 UTC

svn commit: r1505711 - in /commons/dev/plugins/commonsdev-example-plugin: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/commons/ src/main/java/org/apache/commons/dev_plugins/ src/main/java/org/ap...

Author: sebb
Date: Mon Jul 22 15:12:16 2013
New Revision: 1505711

URL: http://svn.apache.org/r1505711
Log:
Add example developer plugin

Added:
    commons/dev/plugins/commonsdev-example-plugin/pom.xml   (with props)
    commons/dev/plugins/commonsdev-example-plugin/src/
    commons/dev/plugins/commonsdev-example-plugin/src/main/
    commons/dev/plugins/commonsdev-example-plugin/src/main/java/
    commons/dev/plugins/commonsdev-example-plugin/src/main/java/org/
    commons/dev/plugins/commonsdev-example-plugin/src/main/java/org/apache/
    commons/dev/plugins/commonsdev-example-plugin/src/main/java/org/apache/commons/
    commons/dev/plugins/commonsdev-example-plugin/src/main/java/org/apache/commons/dev_plugins/
    commons/dev/plugins/commonsdev-example-plugin/src/main/java/org/apache/commons/dev_plugins/example/
    commons/dev/plugins/commonsdev-example-plugin/src/main/java/org/apache/commons/dev_plugins/example/ExampleMojo.java   (with props)
    commons/dev/plugins/commonsdev-example-plugin/src/main/java/org/apache/commons/dev_plugins/example/HelpMojo.java   (with props)
    commons/dev/plugins/commonsdev-example-plugin/src/test/
    commons/dev/plugins/commonsdev-example-plugin/src/test/java/

Added: commons/dev/plugins/commonsdev-example-plugin/pom.xml
URL: http://svn.apache.org/viewvc/commons/dev/plugins/commonsdev-example-plugin/pom.xml?rev=1505711&view=auto
==============================================================================
--- commons/dev/plugins/commonsdev-example-plugin/pom.xml (added)
+++ commons/dev/plugins/commonsdev-example-plugin/pom.xml Mon Jul 22 15:12:16 2013
@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ 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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-parent</artifactId>
+      <version>32</version>
+  </parent>
+ 
+  <groupId>org.apache.commons.dev_plugins</groupId>
+  <artifactId>commonsdev-example-plugin</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <name>Apache Commons Developer Example Maven Mojo</name>
+  <packaging>maven-plugin</packaging>
+  <inceptionYear>2013</inceptionYear>
+
+  <description>
+  This Apache Commons Developer Example plugin for Maven is just an example
+  </description>
+
+  <distributionManagement>
+    <repository>
+      <!-- Must use the same name, i.e. apache.releases.https  -->
+      <id>apache.releases.https</id>
+      <name>Apache Release Distribution Repository</name>
+      <!-- We override the default release repo to ensure there are no accidental deployments  -->
+      <url>${commons.dev.plugins.repo}</url>
+      <!-- c.f. distMgmtSnapshotsUrl -->
+    </repository>
+  </distributionManagement>
+
+ <!-- Is this section needed? -->
+  <scm>
+             <connection>scm:svn:http://svn.apache.org/repos/asf/commons/dev/plugins/commons-example-plugin/trunk/</connection>
+    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/commons/dev/plugins/commons-example-plugin/trunk/</developerConnection>
+                                <url>http://svn.apache.org/viewvc/commons/dev/plugins/commons-example-plugin/trunk/</url>
+  </scm>
+
+  <prerequisites>
+    <maven>${mavenVersion}</maven>
+  </prerequisites>
+
+   <properties>
+    <mavenVersion>2.2.1</mavenVersion>
+    <mavenPluginPluginVersion>3.2</mavenPluginPluginVersion>
+    <maven.compiler.source>1.5</maven.compiler.source>
+    <maven.compiler.target>1.5</maven.compiler.target>
+    <!-- Avoid problems with jar & osgi builds in CP -->
+    <commons.manifestfile />
+  </properties>
+
+  <dependencies>
+
+    <!-- Needed by AbstractExecMojo for command execution etc. -->
+    <dependency>
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-utils</artifactId>
+      <version>3.0.7</version>
+    </dependency>
+    <!-- needed to fetch login credentials from settings.xml -->
+    <dependency>
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-container-default</artifactId>
+      <version>1.0-alpha-9</version>
+      <scope>provided</scope>
+    </dependency>
+    <!-- needed to decode login credentials from settings.xml -->
+    <dependency>
+      <groupId>org.sonatype.plexus</groupId>
+      <artifactId>plexus-sec-dispatcher</artifactId>
+      <version>1.4</version>
+      <scope>provided</scope>
+    </dependency>
+
+    <!-- Following dependencies are for building/running Mojos -->
+
+    <!-- for our own help Mojo -->
+    <dependency>
+      <groupId>org.apache.maven.plugins</groupId>
+      <artifactId>maven-help-plugin</artifactId>
+      <version>2.2</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-plugin-api</artifactId>
+      <version>${mavenVersion}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-project</artifactId>
+      <version>${mavenVersion}</version>
+      <exclusions>
+        <exclusion>
+          <groupId>org.codehaus.plexus</groupId>
+          <artifactId>plexus-container-default</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.plugin-tools</groupId>
+      <artifactId>maven-plugin-annotations</artifactId>
+      <version>${mavenPluginPluginVersion}</version>
+      <!-- annotations are not needed for plugin execution so you can remove this dependency
+           for execution with using provided scope -->
+      <scope>provided</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <artifactId>maven-plugin-plugin</artifactId>
+          <version>${mavenPluginPluginVersion}</version>
+          <configuration>
+            <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
+          </configuration>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-plugin-plugin</artifactId>
+        <configuration>
+          <!-- see http://jira.codehaus.org/browse/MNG-5346 -->
+          <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
+        </configuration>
+        <executions>
+          <execution>
+            <id>generate-descriptor</id>
+            <goals>
+              <goal>descriptor</goal>
+            </goals>
+          </execution>
+          <!-- The generated Mojo does not handle annotations properly,
+               and does not show any "User property" names.
+               Since this is misleading, it is better to drop the goal
+               The Maven Help plugin does show property names, so we create
+               our own Help Mojo that extends it.
+          <execution>
+            <id>generated-helpmojo</id>
+            <goals>
+              <goal>helpmojo</goal>
+            </goals>
+          </execution>
+           -->
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+  
+</project>

Propchange: commons/dev/plugins/commonsdev-example-plugin/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: commons/dev/plugins/commonsdev-example-plugin/src/main/java/org/apache/commons/dev_plugins/example/ExampleMojo.java
URL: http://svn.apache.org/viewvc/commons/dev/plugins/commonsdev-example-plugin/src/main/java/org/apache/commons/dev_plugins/example/ExampleMojo.java?rev=1505711&view=auto
==============================================================================
--- commons/dev/plugins/commonsdev-example-plugin/src/main/java/org/apache/commons/dev_plugins/example/ExampleMojo.java (added)
+++ commons/dev/plugins/commonsdev-example-plugin/src/main/java/org/apache/commons/dev_plugins/example/ExampleMojo.java Mon Jul 22 15:12:16 2013
@@ -0,0 +1,116 @@
+/*
+ * 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.
+ * 
+ */
+
+package org.apache.commons.dev_plugins.example;
+
+import java.util.Properties;
+
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugins.annotations.Component;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.settings.Server;
+import org.apache.maven.settings.Settings;
+import org.codehaus.plexus.PlexusConstants;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.context.Context;
+import org.codehaus.plexus.context.ContextException;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
+import org.sonatype.plexus.components.sec.dispatcher.SecDispatcher;
+
+/**
+ * Example MOJO that displays some information from settings and project.
+ */
+@Mojo (name = "example")
+public class ExampleMojo  extends AbstractMojo  implements Contextualizable {
+
+    private static final String[] EXPECTED_PROPERTIES = {
+        "maven.compiler.source",
+        "maven.compiler.target",
+        };
+    
+    private static final String[] UNEXPECTED_PROPERTIES = {
+        "maven.compile.source",
+        "maven.compile.target",
+        };
+
+    @Component
+    private MavenProject project;
+
+    @Component
+    private Settings settings;
+
+    // @Component does not work for the container
+    private PlexusContainer container;
+
+    /**
+     * Whether to decode the passwords and passPhrases found in settings.xml
+     */
+    @Parameter( property="example.decodePassword", defaultValue="false")
+    private boolean decodePassword;
+
+    // Canonical way to get the container
+    public void contextualize( Context context ) throws ContextException {  
+        container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
+    }
+
+    public void execute() throws MojoExecutionException, MojoFailureException {
+        System.out.println("Id: " + project.getId());
+        System.out.println("Parent: " + project.getParent().getId());
+        final Properties properties = project.getProperties();
+        for(String prop : EXPECTED_PROPERTIES) {
+            final String property = properties.getProperty(prop);
+            System.out.println(prop + ": " + (property == null ? "*MISSING*" : property));            
+        }
+        for(String prop : UNEXPECTED_PROPERTIES) {
+            final String property = properties.getProperty(prop);
+            if (property != null) {
+                System.out.println("Unexpected: "+ prop + ": " + property);            
+            }
+        }
+        System.out.println("Servers:");
+        for (Server server :settings.getServers()) {
+            final String encryptedPassphrase = server.getPassphrase();
+            final String encryptedString;
+            if (encryptedPassphrase != null) {
+                encryptedString = encryptedPassphrase;
+            } else {
+                encryptedString=server.getPassword();
+            }
+            String pass = "";
+            if (encryptedString != null) {
+                if (decodePassword) {
+                    try {
+                        final SecDispatcher sd = (SecDispatcher) container.lookup( SecDispatcher.ROLE, "maven" );
+                        pass = " " + sd.decrypt(encryptedString);
+                    } catch (Exception e) {
+                        throw new MojoExecutionException("Failed to decode password", e);
+                    }
+                    
+                } else {
+                    pass = " " + encryptedString;
+                }
+            }
+            System.out.println("\t" + server.getId() + " " + server.getUsername() + pass);
+        }
+    }
+
+}

Propchange: commons/dev/plugins/commonsdev-example-plugin/src/main/java/org/apache/commons/dev_plugins/example/ExampleMojo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/dev/plugins/commonsdev-example-plugin/src/main/java/org/apache/commons/dev_plugins/example/ExampleMojo.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: commons/dev/plugins/commonsdev-example-plugin/src/main/java/org/apache/commons/dev_plugins/example/HelpMojo.java
URL: http://svn.apache.org/viewvc/commons/dev/plugins/commonsdev-example-plugin/src/main/java/org/apache/commons/dev_plugins/example/HelpMojo.java?rev=1505711&view=auto
==============================================================================
--- commons/dev/plugins/commonsdev-example-plugin/src/main/java/org/apache/commons/dev_plugins/example/HelpMojo.java (added)
+++ commons/dev/plugins/commonsdev-example-plugin/src/main/java/org/apache/commons/dev_plugins/example/HelpMojo.java Mon Jul 22 15:12:16 2013
@@ -0,0 +1,67 @@
+/*
+ * 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.
+ * 
+ */
+
+package org.apache.commons.dev_plugins.example;
+
+import java.lang.reflect.Field;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugins.annotations.Component;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.help.DescribeMojo;
+import org.apache.maven.project.MavenProject;
+
+/**
+ * Help Mojo that extends the standard Maven help plugin describe goal.
+ * This is needed because the generated help mojo 
+ * does not handle annotation property names at present.
+ */
+@Mojo (name = "help")
+public class HelpMojo extends DescribeMojo {
+
+    @Component
+    private MavenProject myProject; // Must not use same name as DescribeMojo
+
+   /**
+     * @throws MojoExecutionException  
+     * @throws MojoFailureException 
+     */
+    @Override
+    public void execute() throws MojoExecutionException, MojoFailureException {
+        Field f = null;
+        boolean isAccessible = true; // assume accessible
+        try {
+            // Unfortunately the plugin field is private
+            f = DescribeMojo.class.getDeclaredField("plugin");
+            isAccessible = f.isAccessible();
+            if (!isAccessible) {
+                f.setAccessible(true);
+            }
+            String plugin = myProject.getGroupId() + ":" + myProject.getArtifactId();
+            f.set(this, plugin);
+            super.execute();        
+        } catch (Exception e) {
+            throw new MojoExecutionException("Could not set up plugin details");
+        } finally {
+            if (f != null && !isAccessible) {
+                f.setAccessible(isAccessible); // reset accessibility (prob not needed)
+            }
+        }
+    }
+}

Propchange: commons/dev/plugins/commonsdev-example-plugin/src/main/java/org/apache/commons/dev_plugins/example/HelpMojo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/dev/plugins/commonsdev-example-plugin/src/main/java/org/apache/commons/dev_plugins/example/HelpMojo.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision