diff --git a/build.gradle b/build.gradle index ebd08fc0..4ab94dc4 100644 --- a/build.gradle +++ b/build.gradle @@ -1,33 +1,35 @@ buildscript { repositories { - mavenCentral() - } - + jcenter() + maven { url 'http://dl.bintray.com/oehme/maven/' } + } dependencies { - classpath 'org.xtend:xtend-gradle-plugin:0.1.+' + classpath 'org.xtend:xtend-gradle-plugin:0.3.1' + classpath 'de.oehme.sobula:sobula:0.0.+' } } subprojects { - apply plugin: 'xtend' - apply from: '../mavenRelease.gradle' - - group = "org.xtext" - version = "0.0.6" + apply plugin: 'java' + apply plugin: 'eclipse' + apply plugin: 'de.oehme.sobula.maven-release' + apply plugin: 'de.oehme.sobula.bintray-release' - repositories { - mavenCentral() - } - - dependencies { - compile localGroovy() - compile 'org.eclipse.xtend:org.eclipse.xtend.lib:2.6.+' - compile 'com.github.oehme.xtend:xtend-contrib:0.4.+' - } + group = "org.xtext" + version = "0.1.0" + repositories { + jcenter() + } + sourceCompatibility = 1.5 } -task createWrapper(type: Wrapper) { - gradleVersion = '1.12' +configure(subprojects.findAll{p-> p.name.contains('plugin')}){ + apply plugin: 'org.xtend.xtend' + + dependencies { + compile localGroovy() + compile 'org.eclipse.xtend:org.eclipse.xtend.lib:2.7.2' + } } diff --git a/gradle.properties b/gradle.properties deleted file mode 100644 index 1ee8b219..00000000 --- a/gradle.properties +++ /dev/null @@ -1,2 +0,0 @@ -sonatypeUsername="foo" -sonatypePassword="bar" \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 245e1bb7..b80df596 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=http\://services.gradle.org/distributions/gradle-1.12-bin.zip +distributionUrl=http\://services.gradle.org/distributions/gradle-2.1-bin.zip diff --git a/mavenRelease.gradle b/mavenRelease.gradle deleted file mode 100644 index 32afa2a7..00000000 --- a/mavenRelease.gradle +++ /dev/null @@ -1,61 +0,0 @@ -apply plugin: 'maven' -apply plugin: 'signing' - -task javadocJar(type: Jar, dependsOn: javadoc) { - classifier = 'javadoc' - from 'build/docs/javadoc' -} - -task sourcesJar(type: Jar) { - classifier = 'sources' - from sourceSets.main.allSource -} - -artifacts { - archives jar - archives javadocJar - archives sourcesJar -} - -signing { - required {gradle.taskGraph.hasTask("uploadArchives")} - sign configurations.archives -} - -uploadArchives { - repositories { - mavenDeployer { - beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) } - - repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") { - authentication(userName: sonatypeUsername, password: sonatypePassword) - } - - pom.project { - packaging 'jar' - url 'https://github.com/oehme/xtext-gradle-plugin' - - scm { - url 'scm:git@github.com:oehme/xtext-gradle-plugin.git' - connection 'scm:git@github.com:oehme/xtext-gradle-plugin.git' - developerConnection 'scm:git@github.com:oehme/xtext-gradle-plugin.git' - } - - licenses { - license { - name 'Eclipse Public License - v 1.0' - url 'http://www.eclipse.org/org/documents/epl-v10.php' - distribution 'repo' - } - } - - developers { - developer { - id 'oehme' - name 'Stefan Oehme' - } - } - } - } - } -} \ No newline at end of file diff --git a/xtext-gradle-lib/build.gradle b/xtext-gradle-lib/build.gradle index a132e9c8..bf8925ad 100644 --- a/xtext-gradle-lib/build.gradle +++ b/xtext-gradle-lib/build.gradle @@ -1,11 +1,7 @@ +description 'A small wrapper for Xtext to make it easier to use from Gradle' + dependencies { compile ("org.eclipse.xtext:org.eclipse.xtext.builder.standalone:[2.5.4,)") { exclude group:'asm', module:'asm' } } - -uploadArchives.repositories.mavenDeployer.pom.project { - name 'Xtext Gradle Lib' - description 'A small wrapper for Xtext to make it easier to use from Gradle' -} - diff --git a/xtext-gradle-lib/src/main/java/org/xtext/builder/standalone/Main.java b/xtext-gradle-lib/src/main/java/org/xtext/builder/standalone/Main.java index 37c3aba4..2c538298 100644 --- a/xtext-gradle-lib/src/main/java/org/xtext/builder/standalone/Main.java +++ b/xtext-gradle-lib/src/main/java/org/xtext/builder/standalone/Main.java @@ -20,7 +20,7 @@ public class Main { - public static void main(String[] args) throws Exception { + public static boolean generate(String[] args) throws Exception { Injector injector = Guice.createInjector(new StandaloneBuilderModule()); StandaloneBuilder builder = injector.getInstance(StandaloneBuilder.class); builder.setClassPathEntries(new ArrayList()); @@ -53,10 +53,7 @@ public static void main(String[] args) throws Exception { builder.setLanguages(languages); builder.setSourceDirs(sourcePath); - boolean success = builder.launch(); - if (!success) { - throw new IllegalStateException("Xtext failed"); - } + return builder.launch(); } private static void fixEncoding(Map languages, StandaloneBuilder builder) { diff --git a/xtext-gradle-plugin/build.gradle b/xtext-gradle-plugin/build.gradle index 6aab86bc..5d8df5a7 100644 --- a/xtext-gradle-plugin/build.gradle +++ b/xtext-gradle-plugin/build.gradle @@ -1,3 +1,5 @@ +description 'A plugin for invoking Xtext base Code generators' + dependencies { compile gradleApi() compile 'org.eclipse.core:org.eclipse.core.runtime:3.7.0' @@ -7,11 +9,4 @@ jar { manifest { attributes("Implementation-Version": version) } -} - -uploadArchives.repositories.mavenDeployer.pom.project { - name 'Xtext Gradle Plugin' - description 'A plugin for invoking Xtext base Code generators' -} - -project.test.dependsOn project(":xtext-gradle-lib").install \ No newline at end of file +} \ No newline at end of file diff --git a/xtext-gradle-plugin/src/main/java/org/xtext/gradle/tasks/XtextExtension.xtend b/xtext-gradle-plugin/src/main/java/org/xtext/gradle/tasks/XtextExtension.xtend index 63092ede..5db1bb91 100644 --- a/xtext-gradle-plugin/src/main/java/org/xtext/gradle/tasks/XtextExtension.xtend +++ b/xtext-gradle-plugin/src/main/java/org/xtext/gradle/tasks/XtextExtension.xtend @@ -1,7 +1,7 @@ package org.xtext.gradle.tasks; -import de.oehme.xtend.contrib.Property import groovy.lang.Closure +import org.eclipse.xtend.lib.annotations.Accessors import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.Project import org.gradle.api.file.SourceDirectorySet @@ -11,11 +11,10 @@ import org.gradle.api.tasks.SourceSet import org.gradle.util.ConfigureUtil class XtextExtension { - @Property String version = "2.6.0" - @Property String encoding = "UTF-8" - @Property SourceDirectorySet sources - @Property boolean fork - @Property NamedDomainObjectContainer languages; + @Accessors String version = "2.7.2" + @Accessors String encoding = "UTF-8" + @Accessors SourceDirectorySet sources + @Accessors NamedDomainObjectContainer languages; private Project project @@ -35,10 +34,10 @@ class XtextExtension { } class Language { - @Property String name; - @Property String setup - @Property boolean consumesJava - @Property NamedDomainObjectContainer outputs + @Accessors String name; + @Accessors String setup + @Accessors boolean consumesJava + @Accessors NamedDomainObjectContainer outputs private Project project @@ -62,9 +61,9 @@ class Language { } class OutputConfiguration { - @Property String name - @Property Object dir - @Property SourceSet javaSourceSet + @Accessors String name + @Accessors Object dir + @Accessors SourceSet javaSourceSet new(String name) { this.name = name diff --git a/xtext-gradle-plugin/src/main/java/org/xtext/gradle/tasks/XtextGenerate.xtend b/xtext-gradle-plugin/src/main/java/org/xtext/gradle/tasks/XtextGenerate.xtend index 7783336b..19414641 100644 --- a/xtext-gradle-plugin/src/main/java/org/xtext/gradle/tasks/XtextGenerate.xtend +++ b/xtext-gradle-plugin/src/main/java/org/xtext/gradle/tasks/XtextGenerate.xtend @@ -1,24 +1,23 @@ package org.xtext.gradle.tasks; -import de.oehme.xtend.contrib.Property import java.io.File import java.net.URLClassLoader -import java.util.ArrayList +import java.util.List +import org.eclipse.xtend.lib.annotations.Accessors import org.gradle.api.DefaultTask import org.gradle.api.GradleException import org.gradle.api.file.FileCollection import org.gradle.api.tasks.InputFiles import org.gradle.api.tasks.TaskAction - -import static extension org.xtext.gradle.GradleExtensions.* +import org.gradle.internal.classloader.FilteringClassLoader class XtextGenerate extends DefaultTask { private XtextExtension xtext - @Property @InputFiles FileCollection xtextClasspath + @Accessors @InputFiles FileCollection xtextClasspath - @Property @InputFiles FileCollection classpath + @Accessors @InputFiles FileCollection classpath def configure(XtextExtension xtext) { this.xtext = xtext @@ -56,36 +55,49 @@ class XtextGenerate extends DefaultTask { ] ] args += xtext.sources.srcDirs.map[absolutePath] - if (xtext.fork) { - generateForked(args) - } else { - generateNonForked(args) - } + generate(args) } - def generateNonForked(ArrayList arguments) { + def generate(List arguments) { System.setProperty("org.eclipse.emf.common.util.ReferenceClearingQueue", "false") val contextClassLoader = Thread.currentThread.contextClassLoader - val classLoader = new URLClassLoader(getXtextClasspath.map[absoluteFile.toURI.toURL], - ClassLoader.systemClassLoader.parent) + val classLoader = getCompilerClassLoader(getXtextClasspath) try { Thread.currentThread.contextClassLoader = classLoader val main = classLoader.loadClass("org.xtext.builder.standalone.Main") - val mainMethod = main.getMethod("main",typeof(String[])) - mainMethod.invoke(null, #[arguments as String[]]) + val method = main.getMethod("generate", typeof(String[])) + val success = method.invoke(null, #[arguments as String[]]) as Boolean + if (!success) { + throw new GradleException('''Xtext generation failed'''); + } } finally { Thread.currentThread.contextClassLoader = contextClassLoader } } - def generateForked(ArrayList args) { - val result = project.javaexec [ - main = "org.xtext.builder.standalone.Main" - it.classpath = getXtextClasspath - setArgs(args) - ] - if (result.exitValue != 0) { - throw new GradleException("Xtext failed"); + static val currentCompilerClassLoader = new ThreadLocal() { + override protected initialValue() { + null } } + + private def getCompilerClassLoader(FileCollection classpath) { + val classPathWithoutLog4j = classpath.filter[!name.contains("log4j")] + val urls = classPathWithoutLog4j.map[absoluteFile.toURI.toURL].toList + val currentClassLoader = currentCompilerClassLoader.get + if (currentClassLoader !== null && currentClassLoader.URLs.toList == urls) { + return currentClassLoader + } else { + val newClassLoader = new URLClassLoader(urls, loggingBridgeClassLoader) + currentCompilerClassLoader.set(newClassLoader) + return newClassLoader + } + } + + private def loggingBridgeClassLoader() { + new FilteringClassLoader(XtextGenerate.classLoader) => [ + allowPackage("org.slf4j") + allowPackage("org.apache.log4j") + ] + } }