Skip to content

Commit

Permalink
Rewrite build to use shade plugin instead of jarjar
Browse files Browse the repository at this point in the history
  • Loading branch information
graemerocher committed Mar 23, 2018
1 parent 847a01b commit 5a1c67f
Show file tree
Hide file tree
Showing 19 changed files with 288 additions and 630 deletions.
86 changes: 19 additions & 67 deletions aop/build.gradle
Original file line number Diff line number Diff line change
@@ -1,75 +1,27 @@
import org.anarres.gradle.plugin.jarjar.JarjarTask

// this is a hack because of how we replace jarjar'ed JAR need to manually supply dependencies to POM
// Declare all dependencies in this map and not with the dependencies block!
def deps = [
compile: [
project(":inject")
]
]

ext.extraPomInfo = {
delegate.dependencies {
for(entry in deps) {
def scope = entry.key
def values = entry.value
for(dep in values) {
delegate.dependency {
def groupId
def artifactId
def artifactVersion

if(dep instanceof Project) {
groupId = projectGroupId
artifactId = dep.name
artifactVersion = version
}
else {

groupId = dep.group
artifactId = dep.name
artifactVersion = dep.version
}

delegate.groupId groupId
delegate.artifactId artifactId
delegate.version artifactVersion
delegate.scope scope
}
}
}
}
}
apply plugin: 'com.github.johnrengelman.plugin-shadow'

dependencies {
for(entry in deps) {
def scope = entry.key
for(dep in entry.value) {
"$scope"(dep)
}
}
shadowCompile project(":inject")
compile project(":inject")
}

shadowJar {
dependencies {
exclude(project(":inject"))
exclude(project(":core"))
exclude(dependency(group:'org.slf4j',name:'slf4j-api',version:slf4jVersion))
exclude(dependency(group: 'javax.inject', name: 'javax.inject', version: '1'))
exclude(dependency('org.ow2.asm:.*:.*'))
exclude(dependency('org.reactivestreams:.*:.*'))
exclude(dependency('com.google.code.findbugs:.*:.*'))
exclude(dependency('com.github.ben-manes.caffeine:.*:.*'))
}

relocate "org.objectweb.asm", "io.micronaut.asm"
relocate "com.github.benmanes.caffeine", "io.micronaut.caffeine"

def targetDir = new File(project.buildDir, "jarjar")
def targetFile = new File(targetDir, "asm.jar")
def jarjarTask = task("jarjarTask", type: JarjarTask) {
from(jar.outputs.files)
classRename "org.objectweb.asm.**", "io.micronaut.asm.@1"
destinationDir = targetDir
destinationName = targetFile.name
}

def jarjarOutputs = task("jarjarOutputs").doLast {
copy {
from zipTree(jarjarTask.outputs.files.first())
into(targetDir)
}
delete(jarjarTask.outputs.files)
}
jarjarOutputs.dependsOn(jarjarTask)
task("rejar", type:Jar, dependsOn: jarjarOutputs) {
from(targetDir)
archiveName = "rejar.jar"
}
tasks.withType(com.github.jengelman.gradle.plugins.shadow.tasks.ConfigureShadowRelocation) { t ->
t.enabled = false
}
17 changes: 6 additions & 11 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
buildscript {
repositories {
mavenLocal()
maven { url "https://repo.grails.org/grails/core" }
}
dependencies {
Expand All @@ -9,21 +8,15 @@ buildscript {
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
classpath 'com.bmuschko:gradle-nexus-plugin:2.3.1'
classpath 'io.github.groovylang.groovydoc:groovydoc-gradle-plugin:1.0.1'
classpath "org.anarres.jarjar:jarjar-gradle:1.0.0"
classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.2'
}
}
repositories {
mavenLocal()
maven { url "https://repo.grails.org/grails/core" }
}

version project.projectVersion

ext {
// commonBuild = "https://raw.githubusercontent.com/grails/grails-common-build/master"
commonBuild = "https://raw.githubusercontent.com/grails/grails-common-build/4a7cf067b69c02bbfa9fe3d5c14ccc177b51ae59/"
}

subprojects { subproject ->

version project.projectVersion
Expand All @@ -48,7 +41,6 @@ subprojects { subproject ->


repositories {
mavenLocal()
maven { url "https://repo.grails.org/grails/core" }
}

Expand Down Expand Up @@ -90,6 +82,7 @@ subprojects { subproject ->
}

configurations {
shadowCompile
documentation
all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
Expand All @@ -106,6 +99,8 @@ subprojects { subproject ->

dependencies {
compile "org.slf4j:slf4j-api:$slf4jVersion"
// shadowCompile group:"org.slf4j", name:"slf4j-api", version:slf4jVersion

compileOnly([group:'com.github.ben-manes.caffeine',name:'caffeine', version:caffeineVersion])
testCompile([group:'com.github.ben-manes.caffeine',name:'caffeine', version:caffeineVersion])
testCompile "org.codehaus.groovy:groovy:$groovyVersion"
Expand All @@ -117,8 +112,8 @@ subprojects { subproject ->

testRuntime "ch.qos.logback:logback-classic:1.2.3"
testCompile "org.codehaus.groovy:groovy-test:$groovyVersion"
compileOnly 'org.ow2.asm:asm:5.2'
compileOnly 'org.ow2.asm:asm-commons:5.2'
compileOnly "org.ow2.asm:asm:$asmVersion"
compileOnly "org.ow2.asm:asm-commons:$asmVersion"

testCompile "org.ow2.asm:asm:$asmVersion"
testCompile "org.ow2.asm:asm-commons:$asmVersion"
Expand Down
1 change: 1 addition & 0 deletions buildSrc/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@ repositories {
}
dependencies {
compile 'org.asciidoctor:asciidoctorj:1.5.6'
compile "com.github.jengelman.gradle.plugins:shadow:2.0.2"
}
7 changes: 6 additions & 1 deletion configurations/mongo-reactive/build.gradle
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar

dependencies {
compile project(":aop")
compile project(":runtime")
compile project(":validation")
compileOnly project(":inject-java")
Expand All @@ -12,4 +15,6 @@ dependencies {
testCompile "de.flapdoodle.embed:de.flapdoodle.embed.mongo:2.0.1"
testCompile "io.reactivex.rxjava2:rxjava:$rxJava2Version"
testCompile "org.mongodb:mongo-java-driver:$mongoVersion"
}
}
//compileJava.options.forkOptions.jvmArgs =['-verbose']
//compileJava.options.fork=true
166 changes: 19 additions & 147 deletions core/build.gradle
Original file line number Diff line number Diff line change
@@ -1,155 +1,27 @@
import org.anarres.gradle.plugin.jarjar.JarjarTask
apply plugin: 'com.github.johnrengelman.plugin-shadow'

// this is a hack because of how we replace jarjar'ed JAR need to manually supply dependencies to POM
// Declare all dependencies in this map and not with the dependencies block!
def deps = [
compile: [
[group:'org.reactivestreams', name:'reactive-streams', version:'1.0.1'],
[group:'com.google.code.findbugs',name:'jsr305',version:'3.0.2']
]
]

ext.extraPomInfo = {
delegate.dependencies {
for(entry in deps) {
def scope = entry.key
def values = entry.value
for(dep in values) {
delegate.dependency {
def groupId
def artifactId
def artifactVersion

if(dep instanceof Project) {
groupId = projectGroupId
artifactId = dep.name
artifactVersion = version
}
else {

groupId = dep.group
artifactId = dep.name
artifactVersion = dep.version
}

delegate.groupId groupId
delegate.artifactId artifactId
delegate.version artifactVersion
delegate.scope scope
}
}
}
}
}


dependencies {
for(entry in deps) {
def scope = entry.key
for(dep in entry.value) {
"$scope"(dep)
}
}
}


// ##########################
// JARJAR handling
def targetDir = new File(project.buildDir, "jarjar")

// ##########################
// ASM JARJAR handling
def asmDependencies = [
[group:'org.ow2.asm', name: 'asm', version:asmVersion],
[group:'org.ow2.asm', name: 'asm-commons', version:asmVersion],
[group:'org.ow2.asm', name: 'asm-tree', version:asmVersion]

]
Task taskAsmDownload = buildDownloadTask("asm", asmDependencies, asmVersion)
buildJarJarTask(targetDir, taskAsmDownload, "asm", ["org.objectweb.asm": "io.micronaut.asm"])


// ##########################
// Caffeine JARJAR handling
def caffeineDependencies = [
[group:'com.github.ben-manes.caffeine',name:'caffeine', version: caffeineVersion],

]
Task caffeineDownloadTask = buildDownloadTask("caffeine", caffeineDependencies, caffeineVersion)
buildJarJarTask(targetDir, caffeineDownloadTask, "caffeine", ["com.github.benmanes.caffeine": "io.micronaut.caffeine"])

// ##########################
// Project JARJAR handling
def jarjarOutputJar = new File(targetDir, "jarjar-output.jar")
def jarjarTask = task("jarjarTask", type: JarjarTask) {
from(project.files(jar.archivePath))
classRename "org.objectweb.asm.**", "io.micronaut.asm.@1"
classRename "com.github.benmanes.caffeine.**", "io.micronaut.caffeine.@1"
destinationDir = targetDir
destinationName = jarjarOutputJar.name
}
jarjarTask.dependsOn(jar)

def jarjarOutputs = task("jarjarOutputs").doLast {
copy {
from zipTree(jarjarTask.destinationPath)
into(targetDir)
shadowJar {
dependencies {
exclude(dependency(group:'org.reactivestreams', name:'reactive-streams', version:'1.0.1'))
exclude(dependency(group:'com.google.code.findbugs',name:'jsr305',version:'3.0.2'))
}
delete(jarjarTask.destinationPath)
relocate "org.objectweb.asm", "io.micronaut.asm"
relocate "com.github.benmanes.caffeine", "io.micronaut.caffeine"
}

jarjarOutputs.dependsOn(jarjarTask)
task("rejar", type:Jar, dependsOn: jarjarOutputs) {
from(targetDir)
archiveName = "rejar.jar"
tasks.withType(com.github.jengelman.gradle.plugins.shadow.tasks.ConfigureShadowRelocation) { t ->
t.enabled = false
}

protected Task buildDownloadTask(String name, List dependencies, String version) {
Task taskAsmDownload = task("${name}Download")
File downloadDir = new File(project.buildDir, "artifact-download")
File targetDir = new File(downloadDir, name)
taskAsmDownload.doLast {
URI mavenCentralURL = repositories.find(){
println it.name
it.name == 'maven'
}.url
ant.mkdir(dir:targetDir)
for(dep in dependencies) {

ant.get(src:"${mavenCentralURL}/${dep.group.replace('.','/')}/${dep.name}/${dep.version}/${dep.name}-${dep.version}.jar", dest: targetDir)
}
}
taskAsmDownload.inputs.properties(version: version)
taskAsmDownload.outputs.dir(targetDir)

return taskAsmDownload
}

protected void buildJarJarTask(File targetDir, Task jars, String name, Map mappings) {
File targetJarFile = new File(targetDir, "${name}.jar")
Task jarjarTask = task("${name}jarjarTask", type: JarjarTask) {
from(fileTree(jars.outputs.files.first()))
for(entry in mappings) {
classRename "${entry.key}.**", "${entry.value}.@1"
}
destinationDir = targetDir
destinationName = targetJarFile.name
}
jarjarTask.inputs.files(jars)
jarjarTask.outputs.files(targetJarFile)

Task jarjarOutput = task("${name}jarjarOutput")
jarjarOutput.doLast {
copy {
from(zipTree(targetJarFile)) {
for(v in mappings.values())
include "${v.replace('.','/')}/**"
}
into(new File(project.buildDir, "classes/java/main"))
}
}
jarjarOutput.dependsOn(jarjarTask)
classes {
dependsOn(jarjarOutput)
}
dependencies {
shadowCompile group:'org.reactivestreams', name:'reactive-streams', version:'1.0.1'
shadowCompile group:'com.google.code.findbugs',name:'jsr305',version:'3.0.2'

compile group:'org.reactivestreams', name:'reactive-streams', version:'1.0.1'
compile group:'com.google.code.findbugs',name:'jsr305',version:'3.0.2'
compile group:'org.ow2.asm', name: 'asm', version:asmVersion
compile group:'org.ow2.asm', name: 'asm-commons', version:asmVersion
compile group:'org.ow2.asm', name: 'asm-tree', version:asmVersion
compile group:'com.github.ben-manes.caffeine',name:'caffeine', version: caffeineVersion
}
2 changes: 2 additions & 0 deletions examples/hello-world-java/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ dependencies {
compile "io.micronaut:http-server-netty:${projectVersion}"
compile "io.micronaut:management:${projectVersion}"
compile "io.micronaut.configuration:hibernate-validator:${projectVersion}"
compile 'javax.annotation:javax.annotation-api:1.3.2'

runtime "ch.qos.logback:logback-classic:1.2.3"
compile "io.micronaut:discovery-client:${projectVersion}"

Expand Down
5 changes: 5 additions & 0 deletions examples/hello-world-java/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,11 @@
<artifactId>hibernate-validator</artifactId>
<version>${micronaut.version}</version>
</dependency>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>

<dependency>
<groupId>ch.qos.logback</groupId>
Expand Down
Loading

0 comments on commit 5a1c67f

Please sign in to comment.