Commits

Jan Lahoda  committed e7076a5

Starting with Maven plugin for the cmdline tool

  • Participants
  • Parent commits eb54d67

Comments (0)

Files changed (11)

 ^remoting/server/tests/cache$
 ^remoting/server/tests/results$
 ^remoting/server/hudson/nb-configuration.xml$
-^remoting/ide/local/release$
+^remoting/ide/local/release$
+.*/target$

File cmdline/build.sh

 #!/bin/bash
 ant "$@" clean && ant "$@" build && ant "$@" test && (cd compiler; ant "$@" create-standalone-compiler && build/test/scripted/run )  && (cd tool; ant "$@" create-standalone-tool && build/test/scripted/run ) || exit 1
-
+MAVEN_REPO=`pwd`/build/.m2
+mkdir -p "$MAVEN_REPO"
+mvn $MAVEN_EXTRA_ARGS install:install-file -Dfile=tool/build/jackpot/jackpot.jar -DgroupId=org.netbeans.modules.jackpot30 -DartifactId=tool -Dversion=7.2-SNAPSHOT -Dpackaging=jar -DgeneratePom=true "-DlocalRepositoryPath=$MAVEN_REPO"
+(cd maven; mvn $MAVEN_EXTRA_ARGS -Dmaven.executable=`which mvn` -DaltDeploymentRepository=temp::default::file://"$MAVEN_REPO" deploy)
+(cd build; zip -r .m2.zip .m2)

File cmdline/maven/pom.xml

+<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/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.netbeans.modules.jackpot30</groupId>
+  <artifactId>jackpot30-maven-plugin</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>maven-plugin</packaging>
+
+  <name>Jackpot 3.0 Command Line Tool Maven Bridge</name>
+  <url>https://bitbucket.org/jlahoda/jackpot30/overview</url>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <maven.executable>${env.M2_HOME}/bin/mvn</maven.executable>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-plugin-api</artifactId>
+      <version>2.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.netbeans.modules.jackpot30</groupId>
+      <artifactId>tool</artifactId>
+      <version>7.2-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.1</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-project</artifactId>
+      <version>2.0</version>
+      <type>jar</type>
+    </dependency>
+  </dependencies>
+
+  <build>
+      <plugins>
+          <plugin>
+              <groupId>org.apache.maven.plugins</groupId>
+              <artifactId>maven-surefire-plugin</artifactId>
+              <version>2.12</version>
+              <configuration>
+                  <systemProperties>
+                      <property>
+                          <name>basedir</name>
+                          <value>${basedir}</value>
+                      </property>
+                      <property>
+                          <name>maven.executable</name>
+                          <value>${maven.executable}</value>
+                      </property>
+                  </systemProperties>
+              </configuration>
+          </plugin>
+      </plugins>
+  </build>
+</project>

File cmdline/maven/src/main/java/org/netbeans/modules/jackpot30/maven/RunJackpot30.java

+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 2012 Sun Microsystems, Inc. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common
+ * Development and Distribution License("CDDL") (collectively, the
+ * "License"). You may not use this file except in compliance with the
+ * License. You can obtain a copy of the License at
+ * http://www.netbeans.org/cddl-gplv2.html
+ * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
+ * specific language governing permissions and limitations under the
+ * License.  When distributing the software, include this License Header
+ * Notice in each file and include the License file at
+ * nbbuild/licenses/CDDL-GPL-2-CP.  Sun designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Sun in the GPL Version 2 section of the License file that
+ * accompanied this code. If applicable, add the following below the
+ * License Header, with the fields enclosed by brackets [] replaced by
+ * your own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * If you wish your version of this file to be governed by only the CDDL
+ * or only the GPL Version 2, indicate your decision by adding
+ * "[Contributor] elects to include this software in this distribution
+ * under the [CDDL or GPL Version 2] license." If you do not indicate a
+ * single choice of license, a recipient has the option to distribute
+ * your version of this file under either the CDDL, the GPL Version 2 or
+ * to extend the choice of license to its licensees as provided above.
+ * However, if you add GPL Version 2 code and therefore, elected the GPL
+ * Version 2 license, then the option applies only if the new code is
+ * made subject to such option by the copyright holder.
+ *
+ * Contributor(s):
+ *
+ * Portions Copyrighted 2012 Sun Microsystems, Inc.
+ */
+package org.netbeans.modules.jackpot30.maven;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.maven.artifact.DependencyResolutionRequiredException;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.project.MavenProject;
+import org.netbeans.modules.jackpot30.cmdline.Main;
+
+/**
+ * @goal analyze
+ * @author Jan Lahoda
+ */
+public class RunJackpot30 extends AbstractMojo {
+
+    /**
+     * @parameter expression="${project}"
+     * @required
+     * @readonly
+     */
+    private MavenProject project;
+
+    public void execute() throws MojoExecutionException, MojoFailureException {
+        try {
+            List<String> cmdLine = new ArrayList<String>();
+            cmdLine.add("-no-apply");
+            cmdLine.add("-sourcepath");
+            cmdLine.add(toClassPathString((List<String>) project.getCompileSourceRoots()));
+            cmdLine.add("-classpath");
+            cmdLine.add(toClassPathString((List<String>) project.getCompileClasspathElements()));
+//            if (sourcelevel != null) cmdLine.addArguments(new String[] {"--source", sourcelevel});
+
+            for (String sr : (List<String>) project.getCompileSourceRoots()) {
+                cmdLine.add(sr);
+            }
+
+            Main.compile(cmdLine.toArray(new String[0]));
+        } catch (IOException ex) {
+            throw new MojoExecutionException(ex.getMessage(), ex);
+        } catch (ClassNotFoundException ex) {
+            throw new MojoExecutionException(ex.getMessage(), ex);
+        } catch (DependencyResolutionRequiredException ex) {
+            throw new MojoExecutionException(ex.getMessage(), ex);
+        }
+    }
+
+    private static String toClassPathString(List<String> entries) {
+        StringBuilder classPath = new StringBuilder();
+
+        for (String root : entries) {
+            if (classPath.length() > 0) classPath.append(File.pathSeparatorChar);
+            classPath.append(root);
+        }
+
+        return classPath.toString();
+    }
+
+}

File cmdline/maven/src/test/java/org/netbeans/modules/jackpot30/maven/RunJackpot30Test.java

+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 2012 Sun Microsystems, Inc. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common
+ * Development and Distribution License("CDDL") (collectively, the
+ * "License"). You may not use this file except in compliance with the
+ * License. You can obtain a copy of the License at
+ * http://www.netbeans.org/cddl-gplv2.html
+ * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
+ * specific language governing permissions and limitations under the
+ * License.  When distributing the software, include this License Header
+ * Notice in each file and include the License file at
+ * nbbuild/licenses/CDDL-GPL-2-CP.  Sun designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Sun in the GPL Version 2 section of the License file that
+ * accompanied this code. If applicable, add the following below the
+ * License Header, with the fields enclosed by brackets [] replaced by
+ * your own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * If you wish your version of this file to be governed by only the CDDL
+ * or only the GPL Version 2, indicate your decision by adding
+ * "[Contributor] elects to include this software in this distribution
+ * under the [CDDL or GPL Version 2] license." If you do not indicate a
+ * single choice of license, a recipient has the option to distribute
+ * your version of this file under either the CDDL, the GPL Version 2 or
+ * to extend the choice of license to its licensees as provided above.
+ * However, if you add GPL Version 2 code and therefore, elected the GPL
+ * Version 2 license, then the option applies only if the new code is
+ * made subject to such option by the copyright holder.
+ *
+ * Contributor(s):
+ *
+ * Portions Copyrighted 2012 Sun Microsystems, Inc.
+ */
+package org.netbeans.modules.jackpot30.maven;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.Reader;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ *
+ * @author lahvac
+ */
+public class RunJackpot30Test extends TestCase {
+
+    public static TestSuite suite() {
+        TestSuite result = new TestSuite();
+        String baseDir = System.getProperty("basedir");
+        File testsDir = new File(baseDir, "tests");
+        File[] tests = testsDir.listFiles();
+
+        assertNotNull(tests);
+
+        for (File test : tests) {
+            if (new File(test, "golden").canRead() && new File(test, "pom.xml").canRead()) {
+                result.addTest(new RunJackpot30Test(test.getName(), test));
+            }
+        }
+        
+        return result;
+    }
+
+    private final File testDir;
+
+    public RunJackpot30Test(String testName, File testDir) {
+        super(testName);
+        this.testDir = testDir;
+    }
+
+    @Override
+    protected void runTest() throws Throwable {
+        String maven = System.getProperty("maven.executable");
+
+        assertNotNull(maven);
+
+        Process p = Runtime.getRuntime().exec(new String[] {
+            maven,
+            "-q",
+            "jackpot30:analyze"
+        }, new String[0], testDir);
+
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        Thread outCopy = new Thread(new CopyStream(p.getInputStream(), System.out, out));
+        Thread errCopy = new Thread(new CopyStream(p.getErrorStream(), System.err));
+
+        outCopy.start();
+        errCopy.start();
+        
+        p.waitFor();
+
+        outCopy.join();
+        errCopy.join();
+
+        out.close();
+
+        String output = new String(out.toByteArray());
+        Reader in = new InputStreamReader(new FileInputStream(new File(testDir, "golden")), "UTF-8");
+        StringBuilder golden = new StringBuilder();
+
+        try {
+            int read;
+
+            while ((read = in.read()) != (-1)) {
+                golden.append((char) read);
+            }
+
+            assertEquals(golden.toString().replace("${basedir}", testDir.getAbsolutePath()), output);
+        } finally {
+            in.close();
+        }
+    }
+
+    private static final class CopyStream implements Runnable {
+        private final InputStream from;
+        private final OutputStream[] to;
+
+        public CopyStream(InputStream from, OutputStream... to) {
+            this.from = from;
+            this.to = to;
+        }
+
+        public void run() {
+            try {
+                int read;
+
+                while ((read = from.read()) != (-1)) {
+                    for (OutputStream out : to) {
+                        out.write(read);
+                    }
+                }
+            } catch (IOException ex) {
+                ex.printStackTrace();
+            }
+        }
+
+    }
+}

File cmdline/maven/src/test/resources/unit/test-project-1/pom.xml

+<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/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.netbeans.modules.jackpot30.test</groupId>
+  <artifactId>test-project-1</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>jar</packaging>
+
+  <name>test-project-1</name>
+  <url>http://maven.apache.org</url>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.1</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.netbeans.modules.jackpot30</groupId>
+        <artifactId>jackpot30-maven-plugin</artifactId>
+        <version>1.0-SNAPSHOT</version>
+        <configuration/>
+      </plugin>
+    </plugins>
+  </build>
+</project>

File cmdline/maven/src/test/resources/unit/test-project-1/src/main/java/org/netbeans/modules/jackpot30/test/testproject1/App.java

+package org.netbeans.modules.jackpot30.test.testproject1;
+
+/**
+ * Hello world!
+ *
+ */
+public class App 
+{
+    public static void main( String[] args )
+    {
+        System.out.println( "Hello World!" );
+    }
+}

File cmdline/maven/src/test/resources/unit/test-project-1/src/test/java/org/netbeans/modules/jackpot30/test/testproject1/AppTest.java

+package org.netbeans.modules.jackpot30.test.testproject1;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest 
+    extends TestCase
+{
+    /**
+     * Create the test case
+     *
+     * @param testName name of the test case
+     */
+    public AppTest( String testName )
+    {
+        super( testName );
+    }
+
+    /**
+     * @return the suite of tests being tested
+     */
+    public static Test suite()
+    {
+        return new TestSuite( AppTest.class );
+    }
+
+    /**
+     * Rigourous Test :-)
+     */
+    public void testApp()
+    {
+        assertTrue( true );
+    }
+}

File cmdline/maven/tests/test1/golden

+${basedir}/src/main/java/test/App.java:7: warning: Synchronization on non-final field
+        synchronized (LOCK) {
+                     ^

File cmdline/maven/tests/test1/pom.xml

+<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/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.netbeans.modules.jackpot30</groupId>
+  <artifactId>maven-test</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>jar</packaging>
+
+  <name>jackpot30-maven-plugin-test1</name>
+  <url>http://maven.apache.org</url>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.1</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.netbeans.modules.jackpot30</groupId>
+        <artifactId>jackpot30-maven-plugin</artifactId>
+        <version>1.0-SNAPSHOT</version>
+      </plugin>
+    </plugins>
+  </build>
+</project>

File cmdline/maven/tests/test1/src/main/java/test/App.java

+package test;
+
+public class App  {
+    private static Object LOCK = new Object();
+
+    public static void main( String[] args ) {
+        synchronized (LOCK) {
+            System.err.println("underLock");
+        }
+    }
+}