Revision: 19583
http://sourceforge.net/p/gate/code/19583
Author: markagreenwood
Date: 2016-09-20 05:55:30 +0000 (Tue, 20 Sep 2016)
Log Message:
-----------
the new GATE maven plugin to help with the build process
Added Paths:
-----------
gate/branches/sawdust2/gate-maven-plugin/
gate/branches/sawdust2/gate-maven-plugin/.classpath
gate/branches/sawdust2/gate-maven-plugin/.project
gate/branches/sawdust2/gate-maven-plugin/pom.xml
gate/branches/sawdust2/gate-maven-plugin/src/
gate/branches/sawdust2/gate-maven-plugin/src/it/
gate/branches/sawdust2/gate-maven-plugin/src/it/settings.xml
gate/branches/sawdust2/gate-maven-plugin/src/it/simple-it/
gate/branches/sawdust2/gate-maven-plugin/src/it/simple-it/pom.xml
gate/branches/sawdust2/gate-maven-plugin/src/it/simple-it/verify.groovy
gate/branches/sawdust2/gate-maven-plugin/src/main/
gate/branches/sawdust2/gate-maven-plugin/src/main/java/
gate/branches/sawdust2/gate-maven-plugin/src/main/java/uk/
gate/branches/sawdust2/gate-maven-plugin/src/main/java/uk/ac/
gate/branches/sawdust2/gate-maven-plugin/src/main/java/uk/ac/gate/
gate/branches/sawdust2/gate-maven-plugin/src/main/java/uk/ac/gate/maven/
gate/branches/sawdust2/gate-maven-plugin/src/main/java/uk/ac/gate/maven/DumpCreoleToXML.java
Added: gate/branches/sawdust2/gate-maven-plugin/.classpath
===================================================================
--- gate/branches/sawdust2/gate-maven-plugin/.classpath
(rev 0)
+++ gate/branches/sawdust2/gate-maven-plugin/.classpath 2016-09-20 05:55:30 UTC
(rev 19583)
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" output="target/classes" path="src/main/java">
+ <attributes>
+ <attribute name="optional" value="true"/>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="src" output="target/test-classes"
path="src/test/java">
+ <attributes>
+ <attribute name="optional" value="true"/>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="con"
path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
+ <attributes>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="con"
path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+ <attributes>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
Added: gate/branches/sawdust2/gate-maven-plugin/.project
===================================================================
--- gate/branches/sawdust2/gate-maven-plugin/.project
(rev 0)
+++ gate/branches/sawdust2/gate-maven-plugin/.project 2016-09-20 05:55:30 UTC
(rev 19583)
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>gate-maven-plugin</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.m2e.core.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>
+ </natures>
+</projectDescription>
Added: gate/branches/sawdust2/gate-maven-plugin/pom.xml
===================================================================
--- gate/branches/sawdust2/gate-maven-plugin/pom.xml
(rev 0)
+++ gate/branches/sawdust2/gate-maven-plugin/pom.xml 2016-09-20 05:55:30 UTC
(rev 19583)
@@ -0,0 +1,56 @@
+<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>uk.ac.gate</groupId>
+ <artifactId>gate-maven-plugin</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ <packaging>maven-plugin</packaging>
+
+ <name>GATE Maven Plugin</name>
+
+ <organization>
+ <name>GATE</name>
+ <url>http://gate.ac.uk</url>
+ </organization>
+
+ <properties>
+ <maven.compiler.source>1.8</maven.compiler.source>
+ <maven.compiler.target>1.8</maven.compiler.target>
+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.plugin-tools</groupId>
+ <artifactId>maven-plugin-annotations</artifactId>
+ <version>3.2</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-project</artifactId>
+ <version>2.0.11</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact</artifactId>
+ <version>2.0.11</version>
+ </dependency>
+
+ <dependency>
+ <groupId>uk.ac.gate</groupId>
+ <artifactId>gate-core</artifactId>
+ <version>9.0-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+
+
+</project>
Added: gate/branches/sawdust2/gate-maven-plugin/src/it/settings.xml
===================================================================
--- gate/branches/sawdust2/gate-maven-plugin/src/it/settings.xml
(rev 0)
+++ gate/branches/sawdust2/gate-maven-plugin/src/it/settings.xml
2016-09-20 05:55:30 UTC (rev 19583)
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+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.
+-->
+
+<settings>
+ <profiles>
+ <profile>
+ <id>it-repo</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <repositories>
+ <repository>
+ <id>local.central</id>
+ <url>@localRepositoryUrl@</url>
+ <releases>
+ <enabled>true</enabled>
+ </releases>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ </repository>
+ </repositories>
+ <pluginRepositories>
+ <pluginRepository>
+ <id>local.central</id>
+ <url>@localRepositoryUrl@</url>
+ <releases>
+ <enabled>true</enabled>
+ </releases>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ </pluginRepository>
+ </pluginRepositories>
+ </profile>
+ </profiles>
+</settings>
Added: gate/branches/sawdust2/gate-maven-plugin/src/it/simple-it/pom.xml
===================================================================
--- gate/branches/sawdust2/gate-maven-plugin/src/it/simple-it/pom.xml
(rev 0)
+++ gate/branches/sawdust2/gate-maven-plugin/src/it/simple-it/pom.xml
2016-09-20 05:55:30 UTC (rev 19583)
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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>uk.ac.gate.it</groupId>
+ <artifactId>simple-it</artifactId>
+ <version>1.0-SNAPSHOT</version>
+
+ <description>A simple IT verifying the basic use case.</description>
+
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ </properties>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>@project.groupId@</groupId>
+ <artifactId>@project.artifactId@</artifactId>
+ <version>@project.version@</version>
+ <executions>
+ <execution>
+ <id>touch</id>
+ <phase>validate</phase>
+ <goals>
+ <goal>touch</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
Added: gate/branches/sawdust2/gate-maven-plugin/src/it/simple-it/verify.groovy
===================================================================
--- gate/branches/sawdust2/gate-maven-plugin/src/it/simple-it/verify.groovy
(rev 0)
+++ gate/branches/sawdust2/gate-maven-plugin/src/it/simple-it/verify.groovy
2016-09-20 05:55:30 UTC (rev 19583)
@@ -0,0 +1,3 @@
+File touchFile = new File( basedir, "target/touch.txt" );
+
+assert touchFile.isFile()
Added:
gate/branches/sawdust2/gate-maven-plugin/src/main/java/uk/ac/gate/maven/DumpCreoleToXML.java
===================================================================
---
gate/branches/sawdust2/gate-maven-plugin/src/main/java/uk/ac/gate/maven/DumpCreoleToXML.java
(rev 0)
+++
gate/branches/sawdust2/gate-maven-plugin/src/main/java/uk/ac/gate/maven/DumpCreoleToXML.java
2016-09-20 05:55:30 UTC (rev 19583)
@@ -0,0 +1,138 @@
+package uk.ac.gate.maven;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.project.MavenProject;
+import org.jdom.Document;
+import org.jdom.Element;
+import org.jdom.input.SAXBuilder;
+import org.jdom.output.Format;
+import org.jdom.output.XMLOutputter;
+
+import gate.Gate;
+import gate.Gate.ResourceInfo;
+import gate.Plugin;
+import gate.creole.CreoleAnnotationHandler;
+import gate.util.GateClassLoader;
+import gate.util.asm.ClassReader;
+
+@Mojo(name = "DumpCreoleToXML", defaultPhase = LifecyclePhase.PROCESS_CLASSES)
+public class DumpCreoleToXML extends AbstractMojo {
+ private XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat());
+
+ @Parameter(defaultValue = "${project.build.outputDirectory}", property =
"dir", required = true)
+ private File dir;
+
+ @Parameter(defaultValue = "${project.groupId}", property = "group", required
= true)
+ private String group;
+
+ @Parameter(defaultValue = "${project.artifactId}", property = "artifact",
required = true)
+ private String artifact;
+
+ @Parameter(defaultValue = "${project.version}", property = "version",
required = true)
+ private String version;
+
+ @Parameter(defaultValue="${project}", readonly=true, required=true)
+ private MavenProject project;
+
+ public void execute() throws MojoExecutionException {
+
+ File creoleXML = new File(dir, "creole.xml");
+
+ if (!creoleXML.exists()) return;
+
+ File expandedXML = new File(dir, "META-INF/gate/creole.xml");
+ expandedXML.getParentFile().mkdirs();
+
+ GateClassLoader cl = null;
+
+ try (FileOutputStream fos = new FileOutputStream(expandedXML);) {
+ Gate.init();
+ cl = Gate.getClassLoader().getDisposableClassLoader(dir.toString());
+ cl.addURL(dir.toURI().toURL());
+
+ for (Artifact artifact :
(Set<Artifact>)project.getDependencyArtifacts()) {
+ //This seems wrong as it's also adding GATE itself which we should
probably try and avoid
+ cl.addURL(artifact.getFile().toURI().toURL());
+ }
+
+ Plugin plugin = new TargetPlugin(creoleXML,cl);
+ CreoleAnnotationHandler annotationHandler = new
CreoleAnnotationHandler(plugin);
+ Document creoleDoc = plugin.getCreoleXML();
+ annotationHandler.processAnnotations(creoleDoc);
+ outputter.output(creoleDoc, fos);
+ } catch(Exception e) {
+ throw new MojoExecutionException("error expanding creole", e);
+ }
+ finally {
+ Gate.getClassLoader().forgetClassLoader(cl);
+ }
+ }
+
+ @SuppressWarnings("serial")
+ class TargetPlugin extends Plugin.Maven {
+ private File creoleFile;
+ private GateClassLoader cl;
+
+ public TargetPlugin(File creoleFile, GateClassLoader cl) throws
MalformedURLException {
+ super(group, artifact, version);
+ this.cl = cl;
+ this.creoleFile = creoleFile;
+ this.baseURL = new URL(creoleFile.toURI().toURL(), ".");
+ }
+
+ @Override
+ public Document getCreoleXML() throws Exception {
+ SAXBuilder builder = new SAXBuilder(false);
+ Document jdomDoc = builder.build(new FileInputStream(creoleFile),
+ baseURL.toExternalForm());
+ Element creoleRoot = jdomDoc.getRootElement();
+ Set<String> resources = new HashSet<String>();
+ String dir = creoleFile.getParent();
+ if(!dir.endsWith(File.separator)) dir = dir + File.separator;
+ scanDir(dir.length(), creoleFile.getParentFile(), resources);
+ for(String resource : resources) {
+ Element resourceElement = new Element("RESOURCE");
+ Element classElement = new Element("CLASS");
+ classElement.setText(resource);
+ resourceElement.addContent(classElement);
+ creoleRoot.addContent(resourceElement);
+ }
+ return jdomDoc;
+ }
+
+ private void scanDir(int prefix, File dir, Set<String> resources)
+ throws IOException {
+ for(File file : dir.listFiles()) {
+ if(file.isDirectory()) {
+ scanDir(prefix, file, resources);
+ } else if(file.getName().endsWith((".class"))) {
+ String className = file.getAbsolutePath().substring(prefix);
+ className =
+ className.substring(0, className.length() - 6).replace('/', '.');
+ ClassReader classReader = new ClassReader(new FileInputStream(file));
+ ResourceInfo resInfo = new ResourceInfo(null, className, null);
+ ResourceInfoVisitor visitor = new ResourceInfoVisitor(resInfo);
+ classReader.accept(visitor, ClassReader.SKIP_CODE
+ | ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES);
+ if(visitor.isCreoleResource()) {
+ resources.add(className);
+ }
+ }
+ }
+ }
+ }
+}
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
_______________________________________________
GATE-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gate-cvs