1*2835e6bbSSorin Basca// ASM: a very small and fast Java bytecode manipulation framework 2*2835e6bbSSorin Basca// Copyright (c) 2000-2011 INRIA, France Telecom 3*2835e6bbSSorin Basca// All rights reserved. 4*2835e6bbSSorin Basca// 5*2835e6bbSSorin Basca// Redistribution and use in source and binary forms, with or without 6*2835e6bbSSorin Basca// modification, are permitted provided that the following conditions 7*2835e6bbSSorin Basca// are met: 8*2835e6bbSSorin Basca// 1. Redistributions of source code must retain the above copyright 9*2835e6bbSSorin Basca// notice, this list of conditions and the following disclaimer. 10*2835e6bbSSorin Basca// 2. Redistributions in binary form must reproduce the above copyright 11*2835e6bbSSorin Basca// notice, this list of conditions and the following disclaimer in the 12*2835e6bbSSorin Basca// documentation and/or other materials provided with the distribution. 13*2835e6bbSSorin Basca// 3. Neither the name of the copyright holders nor the names of its 14*2835e6bbSSorin Basca// contributors may be used to endorse or promote products derived from 15*2835e6bbSSorin Basca// this software without specific prior written permission. 16*2835e6bbSSorin Basca// 17*2835e6bbSSorin Basca// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 18*2835e6bbSSorin Basca// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19*2835e6bbSSorin Basca// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20*2835e6bbSSorin Basca// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 21*2835e6bbSSorin Basca// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22*2835e6bbSSorin Basca// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23*2835e6bbSSorin Basca// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24*2835e6bbSSorin Basca// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 25*2835e6bbSSorin Basca// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26*2835e6bbSSorin Basca// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 27*2835e6bbSSorin Basca// THE POSSIBILITY OF SUCH DAMAGE. 28*2835e6bbSSorin Basca 29*2835e6bbSSorin Bascabuildscript { 30*2835e6bbSSorin Basca repositories { mavenCentral() } 31*2835e6bbSSorin Basca dependencies { classpath 'org.netbeans.tools:sigtest-maven-plugin:1.5' } 32*2835e6bbSSorin Basca} 33*2835e6bbSSorin Basca 34*2835e6bbSSorin Bascaplugins { id 'com.github.sherter.google-java-format' version '0.9' apply false } 35*2835e6bbSSorin Bascaplugins { id 'me.champeau.jmh' version '0.6.8' apply false } 36*2835e6bbSSorin Bascaplugins { id 'org.sonarqube' version '4.3.1.3277' apply false } 37*2835e6bbSSorin Basca 38*2835e6bbSSorin Bascadescription = 'ASM, a very small and fast Java bytecode manipulation framework' 39*2835e6bbSSorin Basca 40*2835e6bbSSorin Bascaapply plugin: 'java-platform' 41*2835e6bbSSorin Bascadependencies { 42*2835e6bbSSorin Basca constraints { 43*2835e6bbSSorin Basca api project(':asm'), project(':asm-tree'), project(':asm-analysis') 44*2835e6bbSSorin Basca api project(':asm-util'), project(':asm-commons') 45*2835e6bbSSorin Basca } 46*2835e6bbSSorin Basca} 47*2835e6bbSSorin Basca 48*2835e6bbSSorin Bascaallprojects { 49*2835e6bbSSorin Basca group = 'org.ow2.asm' 50*2835e6bbSSorin Basca version = '9.6' + (rootProject.hasProperty('release') ? '' : '-SNAPSHOT') 51*2835e6bbSSorin Basca} 52*2835e6bbSSorin Basca 53*2835e6bbSSorin Bascasubprojects { 54*2835e6bbSSorin Basca repositories { mavenCentral() } 55*2835e6bbSSorin Basca apply plugin: 'java-library' 56*2835e6bbSSorin Basca apply plugin: 'jacoco' 57*2835e6bbSSorin Basca sourceCompatibility = '1.8' 58*2835e6bbSSorin Basca targetCompatibility = '1.8' 59*2835e6bbSSorin Basca test { useJUnitPlatform() } 60*2835e6bbSSorin Basca ext.provides = [] // The provided java packages, e.g. ['org.objectweb.asm'] 61*2835e6bbSSorin Basca ext.requires = [] // The required Gradle projects, e.g. [':asm-test'] 62*2835e6bbSSorin Basca ext.transitiveRequires = { -> 63*2835e6bbSSorin Basca return requires.collect{project(it)} 64*2835e6bbSSorin Basca .collect{it.transitiveRequires().plus(it.provides[0])}.flatten() as Set 65*2835e6bbSSorin Basca } 66*2835e6bbSSorin Basca ext.transitiveImports = { -> 67*2835e6bbSSorin Basca return requires.collect{project(it)} 68*2835e6bbSSorin Basca .collect{it.transitiveImports().plus(it.provides)}.flatten() as Set 69*2835e6bbSSorin Basca } 70*2835e6bbSSorin Basca ext.depends = [] // The external dependencies, e.g. ['junit:junit:4.12'] 71*2835e6bbSSorin Basca // Some external dependencies (such as Jacoco) depend transitively on ASM, and 72*2835e6bbSSorin Basca // without this rule Gradle can mix ASM jars of different versions (e.g. 73*2835e6bbSSorin Basca // asm-6.0.jar with the asm-tree.jar built locally). 74*2835e6bbSSorin Basca configurations.all { resolutionStrategy { preferProjectModules() } } 75*2835e6bbSSorin Basca} 76*2835e6bbSSorin Basca 77*2835e6bbSSorin Basca// ----------------------------------------------------------------------------- 78*2835e6bbSSorin Basca// Project descriptions 79*2835e6bbSSorin Basca// ----------------------------------------------------------------------------- 80*2835e6bbSSorin Basca 81*2835e6bbSSorin Bascaproject(':asm') { 82*2835e6bbSSorin Basca description = parent.description 83*2835e6bbSSorin Basca provides = ['org.objectweb.asm', 'org.objectweb.asm.signature'] 84*2835e6bbSSorin Basca} 85*2835e6bbSSorin Basca 86*2835e6bbSSorin Bascaproject(':asm-analysis') { 87*2835e6bbSSorin Basca description = "Static code analysis API of ${parent.description}" 88*2835e6bbSSorin Basca provides = ['org.objectweb.asm.tree.analysis'] 89*2835e6bbSSorin Basca requires = [':asm-tree'] 90*2835e6bbSSorin Basca} 91*2835e6bbSSorin Basca 92*2835e6bbSSorin Bascaproject(':asm-commons') { 93*2835e6bbSSorin Basca description = "Usefull class adapters based on ${parent.description}" 94*2835e6bbSSorin Basca provides = ['org.objectweb.asm.commons'] 95*2835e6bbSSorin Basca requires = [':asm', ':asm-tree'] 96*2835e6bbSSorin Basca dependencies { testImplementation project(':asm-util') } 97*2835e6bbSSorin Basca} 98*2835e6bbSSorin Basca 99*2835e6bbSSorin Bascaproject(':asm-test') { 100*2835e6bbSSorin Basca description = "Utilities for testing ${parent.description}" 101*2835e6bbSSorin Basca provides = ['org.objectweb.asm.test'] 102*2835e6bbSSorin Basca depends = ['org.junit.jupiter:junit-jupiter-api:5.9.1', 103*2835e6bbSSorin Basca 'org.junit.jupiter:junit-jupiter-params:5.9.1'] 104*2835e6bbSSorin Basca} 105*2835e6bbSSorin Basca 106*2835e6bbSSorin Bascaproject(':asm-tree') { 107*2835e6bbSSorin Basca description = "Tree API of ${parent.description}" 108*2835e6bbSSorin Basca provides = ['org.objectweb.asm.tree'] 109*2835e6bbSSorin Basca requires = [':asm'] 110*2835e6bbSSorin Basca} 111*2835e6bbSSorin Basca 112*2835e6bbSSorin Bascaproject(':asm-util') { 113*2835e6bbSSorin Basca description = "Utilities for ${parent.description}" 114*2835e6bbSSorin Basca provides = ['org.objectweb.asm.util'] 115*2835e6bbSSorin Basca requires = [':asm', ':asm-tree', ':asm-analysis'] 116*2835e6bbSSorin Basca dependencies { testImplementation 'org.codehaus.janino:janino:3.1.9' } 117*2835e6bbSSorin Basca} 118*2835e6bbSSorin Basca 119*2835e6bbSSorin Basca// Use "gradle benchmarks:jmh [-PjmhInclude='<regex>']" to run the benchmarks. 120*2835e6bbSSorin Bascaproject(':benchmarks') { 121*2835e6bbSSorin Basca description = "Benchmarks for ${rootProject.description}" 122*2835e6bbSSorin Basca apply plugin: 'me.champeau.jmh' 123*2835e6bbSSorin Basca dependencies { 124*2835e6bbSSorin Basca implementation files('libs/csg-bytecode-1.0.0.jar', 'libs/jclasslib.jar') 125*2835e6bbSSorin Basca jmh project(':asm'), project(':asm-tree') 126*2835e6bbSSorin Basca } 127*2835e6bbSSorin Basca depends = [ 128*2835e6bbSSorin Basca 'kawa:kawa:1.7', 129*2835e6bbSSorin Basca 'net.sf.jiapi:jiapi-reflect:0.5.2', 130*2835e6bbSSorin Basca 'net.sourceforge.serp:serp:1.15.1', 131*2835e6bbSSorin Basca 'org.apache.bcel:bcel:6.0', 132*2835e6bbSSorin Basca 'org.aspectj:aspectjweaver:1.8.10', 133*2835e6bbSSorin Basca 'org.cojen:cojen:2.2.5', 134*2835e6bbSSorin Basca 'org.javassist:javassist:3.21.0-GA', 135*2835e6bbSSorin Basca 'org.mozilla:rhino:1.7.7.1' 136*2835e6bbSSorin Basca ] 137*2835e6bbSSorin Basca ['4.0', '5.0.1', '6.0', '7.0', '8.0.1', '9.0'].each { version -> 138*2835e6bbSSorin Basca configurations.create("asm${version}") 139*2835e6bbSSorin Basca dependencies.add("asm${version}", "org.ow2.asm:asm:${version}@jar") 140*2835e6bbSSorin Basca dependencies.add("asm${version}", "org.ow2.asm:asm-tree:${version}@jar") 141*2835e6bbSSorin Basca task "asm${version}"(type: Copy) { 142*2835e6bbSSorin Basca from configurations."asm${version}".collect{zipTree(it)} 143*2835e6bbSSorin Basca into "${buildDir}/asm${version}" 144*2835e6bbSSorin Basca duplicatesStrategy = DuplicatesStrategy.INCLUDE // module-info.class 145*2835e6bbSSorin Basca } 146*2835e6bbSSorin Basca classes.dependsOn "asm${version}" 147*2835e6bbSSorin Basca } 148*2835e6bbSSorin Basca configurations.create('input-classes-java8') 149*2835e6bbSSorin Basca dependencies.add('input-classes-java8', 'io.vavr:vavr:0.10.0@jar') 150*2835e6bbSSorin Basca task copyInputClasses(type: Copy) { 151*2835e6bbSSorin Basca from configurations.'input-classes-java8'.collect{zipTree(it)} 152*2835e6bbSSorin Basca into "${buildDir}/input-classes-java8" 153*2835e6bbSSorin Basca } 154*2835e6bbSSorin Basca classes.dependsOn copyInputClasses 155*2835e6bbSSorin Basca jmh { 156*2835e6bbSSorin Basca jvmArgsAppend = ["-Duser.dir=${rootDir}"] 157*2835e6bbSSorin Basca resultFormat = 'CSV' 158*2835e6bbSSorin Basca profilers = ['org.objectweb.asm.benchmarks.MemoryProfiler'] 159*2835e6bbSSorin Basca if (rootProject.hasProperty('jmhInclude')) { 160*2835e6bbSSorin Basca includes = [jmhInclude] 161*2835e6bbSSorin Basca } 162*2835e6bbSSorin Basca } 163*2835e6bbSSorin Basca} 164*2835e6bbSSorin Basca 165*2835e6bbSSorin Bascaproject(':tools') { 166*2835e6bbSSorin Basca description = "Tools used to build ${parent.description}" 167*2835e6bbSSorin Basca} 168*2835e6bbSSorin Basca 169*2835e6bbSSorin Bascaproject(':tools:retrofitter') { 170*2835e6bbSSorin Basca description = "JDK 1.5 class retrofitter based on ${rootProject.description}" 171*2835e6bbSSorin Basca sourceCompatibility = '1.9' 172*2835e6bbSSorin Basca targetCompatibility = '1.9' 173*2835e6bbSSorin Basca // TODO: this compiles asm twice (here and in :asm). 174*2835e6bbSSorin Basca sourceSets.main.java.srcDirs += project(':asm').sourceSets.main.java.srcDirs 175*2835e6bbSSorin Basca} 176*2835e6bbSSorin Basca 177*2835e6bbSSorin Basca// ----------------------------------------------------------------------------- 178*2835e6bbSSorin Basca// Project tasks creation and configuration 179*2835e6bbSSorin Basca// ----------------------------------------------------------------------------- 180*2835e6bbSSorin Basca 181*2835e6bbSSorin Basca// All projects are checked with googleJavaFormat, Checkstyle and PMD, 182*2835e6bbSSorin Basca// and tested with :asm-test and JUnit. 183*2835e6bbSSorin Bascasubprojects { 184*2835e6bbSSorin Basca apply plugin: 'com.github.sherter.google-java-format' 185*2835e6bbSSorin Basca googleJavaFormat.toolVersion = '1.15.0' 186*2835e6bbSSorin Basca googleJavaFormat.exclude 'src/resources/java/**/*' 187*2835e6bbSSorin Basca 188*2835e6bbSSorin Basca // Check the coding style with Checkstyle. Fail in case of error or warning. 189*2835e6bbSSorin Basca apply plugin: 'checkstyle' 190*2835e6bbSSorin Basca checkstyle.configFile = file("${rootDir}/tools/checkstyle.xml") 191*2835e6bbSSorin Basca checkstyle.maxErrors = 0 192*2835e6bbSSorin Basca checkstyle.maxWarnings = 0 193*2835e6bbSSorin Basca 194*2835e6bbSSorin Basca // Check the code with PMD. 195*2835e6bbSSorin Basca apply plugin: 'pmd' 196*2835e6bbSSorin Basca pmd.ruleSets = [] 197*2835e6bbSSorin Basca pmd.ruleSetFiles = files("${rootDir}/tools/pmd.xml") 198*2835e6bbSSorin Basca pmd.consoleOutput = true 199*2835e6bbSSorin Basca pmdMain.dependsOn ':asm:jar' 200*2835e6bbSSorin Basca pmdTest.dependsOn ':asm:jar' 201*2835e6bbSSorin Basca 202*2835e6bbSSorin Basca dependencies { 203*2835e6bbSSorin Basca requires.each { projectName -> api project(projectName) } 204*2835e6bbSSorin Basca depends.each { artifactName -> api artifactName } 205*2835e6bbSSorin Basca testImplementation 'org.junit.jupiter:junit-jupiter-api:5.9.1', 206*2835e6bbSSorin Basca 'org.junit.jupiter:junit-jupiter-params:5.9.1' 207*2835e6bbSSorin Basca testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.9.1' 208*2835e6bbSSorin Basca testImplementation project(':asm-test') 209*2835e6bbSSorin Basca } 210*2835e6bbSSorin Basca 211*2835e6bbSSorin Basca // Produce byte-for-byte reproducible archives. 212*2835e6bbSSorin Basca tasks.withType(AbstractArchiveTask).configureEach { 213*2835e6bbSSorin Basca preserveFileTimestamps = false 214*2835e6bbSSorin Basca reproducibleFileOrder = true 215*2835e6bbSSorin Basca dirMode = 0775 216*2835e6bbSSorin Basca fileMode = 0664 217*2835e6bbSSorin Basca } 218*2835e6bbSSorin Basca} 219*2835e6bbSSorin Basca 220*2835e6bbSSorin Basca// Configure the projects with a non-empty 'provides' property. They must be 221*2835e6bbSSorin Basca// checked for code coverage and backward compatibility, retrofited to Java 1.5, 222*2835e6bbSSorin Basca// and packaged with generated module-info classes. 223*2835e6bbSSorin Bascaconfigure(subprojects.findAll{it.provides}) { 224*2835e6bbSSorin Basca // Code coverage configuration. 225*2835e6bbSSorin Basca jacoco.toolVersion = '0.8.10' 226*2835e6bbSSorin Basca jacocoTestReport { 227*2835e6bbSSorin Basca reports { xml.required = true } 228*2835e6bbSSorin Basca classDirectories.setFrom(sourceSets.main.output.classesDirs) 229*2835e6bbSSorin Basca } 230*2835e6bbSSorin Basca jacocoTestCoverageVerification { 231*2835e6bbSSorin Basca classDirectories.setFrom(sourceSets.main.output.classesDirs) 232*2835e6bbSSorin Basca violationRules.rule { limit { minimum = 0.95; counter = 'INSTRUCTION' } } 233*2835e6bbSSorin Basca dependsOn ':asm:jar' 234*2835e6bbSSorin Basca dependsOn ':asm-tree:jar' 235*2835e6bbSSorin Basca dependsOn ':asm-commons:jar' 236*2835e6bbSSorin Basca } 237*2835e6bbSSorin Basca check.dependsOn jacocoTestCoverageVerification 238*2835e6bbSSorin Basca 239*2835e6bbSSorin Basca // Retrofit the code in-place to Java 1.5 and generate a module-info class 240*2835e6bbSSorin Basca // from the code content, in compileJava.doLast. 241*2835e6bbSSorin Basca if (name != 'asm-test') { 242*2835e6bbSSorin Basca compileJava.dependsOn ':tools:retrofitter:classes' 243*2835e6bbSSorin Basca compileJava.doLast { 244*2835e6bbSSorin Basca def path = project(':tools:retrofitter').sourceSets.main.runtimeClasspath 245*2835e6bbSSorin Basca def loader = new URLClassLoader(path.collect {f -> f.toURL()} as URL[]) 246*2835e6bbSSorin Basca def retrofitter = 247*2835e6bbSSorin Basca loader.loadClass('org.objectweb.asm.tools.Retrofitter').newInstance() 248*2835e6bbSSorin Basca def classes = sourceSets.main.output.classesDirs.singleFile 249*2835e6bbSSorin Basca def requires = transitiveRequires() as List 250*2835e6bbSSorin Basca retrofitter.retrofit(classes, "${version}") 251*2835e6bbSSorin Basca retrofitter.verify(classes, "${version}", provides, requires) 252*2835e6bbSSorin Basca } 253*2835e6bbSSorin Basca } 254*2835e6bbSSorin Basca 255*2835e6bbSSorin Basca // Create one backward compatibility checking task for each 'sigtest-*' file 256*2835e6bbSSorin Basca // in test/resources, and make the 'check' task depend on all these tasks. 257*2835e6bbSSorin Basca if (file('src/test/resources/').exists()) { 258*2835e6bbSSorin Basca file('src/test/resources/').eachFileMatch(~/sigtest-.*/) { f -> 259*2835e6bbSSorin Basca task "${f.name}"(dependsOn: 'classes') { 260*2835e6bbSSorin Basca inputs.files(f, sourceSets.main.java) 261*2835e6bbSSorin Basca outputs.file("${buildDir}/${f.name}") 262*2835e6bbSSorin Basca doLast { 263*2835e6bbSSorin Basca def sigtest = new com.sun.tdk.signaturetest.SignatureTest() 264*2835e6bbSSorin Basca def args = ['-ApiVersion', version, '-Backward', '-Static', 265*2835e6bbSSorin Basca '-Mode', 'bin', '-FileName', f, '-Classpath', 266*2835e6bbSSorin Basca project(':tools').file('jdk8-api.jar').path + File.pathSeparator + 267*2835e6bbSSorin Basca sourceSets.main.output.classesDirs.asPath, '-Package'] + provides 268*2835e6bbSSorin Basca outputs.getFiles()[0].withPrintWriter { printWriter -> 269*2835e6bbSSorin Basca sigtest.run(args as String[], printWriter, null) 270*2835e6bbSSorin Basca } 271*2835e6bbSSorin Basca if (!sigtest.isPassed()) throw new GradleException() 272*2835e6bbSSorin Basca } 273*2835e6bbSSorin Basca } 274*2835e6bbSSorin Basca check.dependsOn f.name 275*2835e6bbSSorin Basca } 276*2835e6bbSSorin Basca // Define a task to create a sigtest file for the current version. 277*2835e6bbSSorin Basca task "buildSigtest"(dependsOn: 'classes') { 278*2835e6bbSSorin Basca inputs.files(sourceSets.main.java) 279*2835e6bbSSorin Basca outputs.file("src/test/resources/sigtest-${version}.txt") 280*2835e6bbSSorin Basca doLast { 281*2835e6bbSSorin Basca def setup = new com.sun.tdk.signaturetest.Setup() 282*2835e6bbSSorin Basca def args = ['-ApiVersion', version, '-FileName', outputs.getFiles()[0], 283*2835e6bbSSorin Basca '-Classpath', project(':tools').file('jdk8-api.jar').path + 284*2835e6bbSSorin Basca File.pathSeparator + sourceSets.main.output.classesDirs.asPath + 285*2835e6bbSSorin Basca File.pathSeparator + sourceSets.main.compileClasspath.asPath, 286*2835e6bbSSorin Basca '-Package'] + provides 287*2835e6bbSSorin Basca setup.run(args as String[], new PrintWriter(System.err, true), null) 288*2835e6bbSSorin Basca if (!setup.isPassed()) throw new GradleException() 289*2835e6bbSSorin Basca } 290*2835e6bbSSorin Basca } 291*2835e6bbSSorin Basca } 292*2835e6bbSSorin Basca 293*2835e6bbSSorin Basca jar.manifest.attributes( 294*2835e6bbSSorin Basca 'Implementation-Title': project.description, 295*2835e6bbSSorin Basca 'Implementation-Version': "${version}") 296*2835e6bbSSorin Basca // Package the project as an OSGi bundle. Exclude the asm-test project (the 297*2835e6bbSSorin Basca // DefaultPackage class prevents it from being a proper bundle). 298*2835e6bbSSorin Basca if (name != 'asm-test') { 299*2835e6bbSSorin Basca def imports = transitiveImports() 300*2835e6bbSSorin Basca jar.manifest.attributes( 301*2835e6bbSSorin Basca 'Bundle-DocURL': 'http://asm.ow2.org', 302*2835e6bbSSorin Basca 'Bundle-License': 'BSD-3-Clause;link=https://asm.ow2.io/LICENSE.txt', 303*2835e6bbSSorin Basca 'Bundle-ManifestVersion': 2, 304*2835e6bbSSorin Basca 'Bundle-Name': provides[0], 305*2835e6bbSSorin Basca 'Bundle-RequiredExecutionEnvironment': 'J2SE-1.5', 306*2835e6bbSSorin Basca 'Bundle-SymbolicName': provides[0], 307*2835e6bbSSorin Basca 'Bundle-Version': "${version}", 308*2835e6bbSSorin Basca 'Export-Package': 309*2835e6bbSSorin Basca provides.collect{"${it};version=\"${version}\""}.join(',') + 310*2835e6bbSSorin Basca (imports ? ";uses:=\"${imports.join(',')}\"" : "")) 311*2835e6bbSSorin Basca if (imports) { 312*2835e6bbSSorin Basca jar.manifest.attributes( 313*2835e6bbSSorin Basca 'Import-Package': 314*2835e6bbSSorin Basca imports.collect{"${it};version=\"${version}\""}.join(','), 315*2835e6bbSSorin Basca 'Module-Requires': 316*2835e6bbSSorin Basca transitiveRequires().collect{"${it};transitive=true"}.join(',')) 317*2835e6bbSSorin Basca } 318*2835e6bbSSorin Basca } 319*2835e6bbSSorin Basca 320*2835e6bbSSorin Basca // Apply the SonarQube plugin to monitor the code quality of the project. 321*2835e6bbSSorin Basca // Use with 'gradlew sonar -Dsonar.host.url=https://sonarqube.ow2.org'. 322*2835e6bbSSorin Basca apply plugin: 'org.sonarqube' 323*2835e6bbSSorin Basca sonar { 324*2835e6bbSSorin Basca properties { property 'sonar.projectKey', "ASM:${project.name}" } 325*2835e6bbSSorin Basca } 326*2835e6bbSSorin Basca 327*2835e6bbSSorin Basca // Add a task to generate a private javadoc and add it as a dependency of the 328*2835e6bbSSorin Basca // 'check' task. 329*2835e6bbSSorin Basca task privateJavadoc(type: Javadoc) { 330*2835e6bbSSorin Basca source = sourceSets.main.allJava 331*2835e6bbSSorin Basca classpath = configurations.compileClasspath 332*2835e6bbSSorin Basca destinationDir = file("${javadoc.destinationDir}-private") 333*2835e6bbSSorin Basca options.memberLevel = JavadocMemberLevel.PRIVATE 334*2835e6bbSSorin Basca options.addBooleanOption('Xdoclint:all,-missing', true) 335*2835e6bbSSorin Basca } 336*2835e6bbSSorin Basca check.dependsOn privateJavadoc 337*2835e6bbSSorin Basca 338*2835e6bbSSorin Basca // Add tasks to generate the Javadoc and a source jar, to be uploaded to Maven 339*2835e6bbSSorin Basca // together with the main jar (containing the compiled code). 340*2835e6bbSSorin Basca task javadocJar(type: Jar, dependsOn: 'javadoc') { 341*2835e6bbSSorin Basca from javadoc.destinationDir 342*2835e6bbSSorin Basca archiveClassifier = 'javadoc' 343*2835e6bbSSorin Basca } 344*2835e6bbSSorin Basca task sourcesJar(type: Jar, dependsOn: 'classes') { 345*2835e6bbSSorin Basca from sourceSets.main.allSource 346*2835e6bbSSorin Basca archiveClassifier = 'sources' 347*2835e6bbSSorin Basca } 348*2835e6bbSSorin Basca java { 349*2835e6bbSSorin Basca withJavadocJar() 350*2835e6bbSSorin Basca withSourcesJar() 351*2835e6bbSSorin Basca } 352*2835e6bbSSorin Basca} 353*2835e6bbSSorin Basca 354*2835e6bbSSorin Basca// Configure the root project, and those with a non-empty 'provides' property, 355*2835e6bbSSorin Basca// to be published in Maven with a POM. 356*2835e6bbSSorin Bascaconfigure([rootProject] + subprojects.findAll { it.provides }) { 357*2835e6bbSSorin Basca apply plugin: 'maven-publish' 358*2835e6bbSSorin Basca apply plugin: 'signing' 359*2835e6bbSSorin Basca publishing { 360*2835e6bbSSorin Basca repositories { 361*2835e6bbSSorin Basca maven { 362*2835e6bbSSorin Basca def baseUrl = 'https://repository.ow2.org/nexus/' 363*2835e6bbSSorin Basca def releasesUrl = baseUrl + 'service/local/staging/deploy/maven2' 364*2835e6bbSSorin Basca def snapshotsUrl = baseUrl + 'content/repositories/snapshots' 365*2835e6bbSSorin Basca name = 'nexus' 366*2835e6bbSSorin Basca url = rootProject.hasProperty('release') ? releasesUrl : snapshotsUrl 367*2835e6bbSSorin Basca credentials { 368*2835e6bbSSorin Basca username System.env.NEXUS_USER_NAME 369*2835e6bbSSorin Basca password System.env.NEXUS_PASSWORD 370*2835e6bbSSorin Basca } 371*2835e6bbSSorin Basca } 372*2835e6bbSSorin Basca } 373*2835e6bbSSorin Basca publications { 374*2835e6bbSSorin Basca maven(MavenPublication) { 375*2835e6bbSSorin Basca def isRoot = project == rootProject 376*2835e6bbSSorin Basca artifactId (isRoot ? 'asm-bom' : project.name) 377*2835e6bbSSorin Basca from (isRoot ? components.javaPlatform : components.java) 378*2835e6bbSSorin Basca pom.withXml { 379*2835e6bbSSorin Basca def parent = asNode().appendNode('parent') 380*2835e6bbSSorin Basca parent.appendNode('groupId', 'org.ow2') 381*2835e6bbSSorin Basca parent.appendNode('artifactId', 'ow2') 382*2835e6bbSSorin Basca parent.appendNode('version', '1.5.1') 383*2835e6bbSSorin Basca } 384*2835e6bbSSorin Basca pom { 385*2835e6bbSSorin Basca name = artifactId 386*2835e6bbSSorin Basca description = project.description 387*2835e6bbSSorin Basca packaging 'jar' 388*2835e6bbSSorin Basca inceptionYear = '2000' 389*2835e6bbSSorin Basca licenses { 390*2835e6bbSSorin Basca license { 391*2835e6bbSSorin Basca name = 'BSD-3-Clause' 392*2835e6bbSSorin Basca url = 'https://asm.ow2.io/license.html' 393*2835e6bbSSorin Basca } 394*2835e6bbSSorin Basca } 395*2835e6bbSSorin Basca url = 'http://asm.ow2.io/' 396*2835e6bbSSorin Basca mailingLists { 397*2835e6bbSSorin Basca mailingList { 398*2835e6bbSSorin Basca name = 'ASM Users List' 399*2835e6bbSSorin Basca subscribe = 'https://mail.ow2.org/wws/subscribe/asm' 400*2835e6bbSSorin Basca post = '[email protected]' 401*2835e6bbSSorin Basca archive = 'https://mail.ow2.org/wws/arc/asm/' 402*2835e6bbSSorin Basca } 403*2835e6bbSSorin Basca mailingList { 404*2835e6bbSSorin Basca name = 'ASM Team List' 405*2835e6bbSSorin Basca subscribe = 'https://mail.ow2.org/wws/subscribe/asm-team' 406*2835e6bbSSorin Basca post = '[email protected]' 407*2835e6bbSSorin Basca archive = 'https://mail.ow2.org/wws/arc/asm-team/' 408*2835e6bbSSorin Basca } 409*2835e6bbSSorin Basca } 410*2835e6bbSSorin Basca issueManagement { 411*2835e6bbSSorin Basca url = 'https://gitlab.ow2.org/asm/asm/issues' 412*2835e6bbSSorin Basca } 413*2835e6bbSSorin Basca scm { 414*2835e6bbSSorin Basca connection = 'scm:git:https://gitlab.ow2.org/asm/asm/' 415*2835e6bbSSorin Basca developerConnection = 'scm:git:https://gitlab.ow2.org/asm/asm/' 416*2835e6bbSSorin Basca url = 'https://gitlab.ow2.org/asm/asm/' 417*2835e6bbSSorin Basca } 418*2835e6bbSSorin Basca developers { 419*2835e6bbSSorin Basca developer { 420*2835e6bbSSorin Basca name = 'Eric Bruneton' 421*2835e6bbSSorin Basca id = 'ebruneton' 422*2835e6bbSSorin Basca email = '[email protected]' 423*2835e6bbSSorin Basca roles = ['Creator', 'Java Developer'] 424*2835e6bbSSorin Basca } 425*2835e6bbSSorin Basca developer { 426*2835e6bbSSorin Basca name = 'Eugene Kuleshov' 427*2835e6bbSSorin Basca id = 'eu' 428*2835e6bbSSorin Basca email = '[email protected]' 429*2835e6bbSSorin Basca roles = ['Java Developer'] 430*2835e6bbSSorin Basca } 431*2835e6bbSSorin Basca developer { 432*2835e6bbSSorin Basca name = 'Remi Forax' 433*2835e6bbSSorin Basca id = 'forax' 434*2835e6bbSSorin Basca email = '[email protected]' 435*2835e6bbSSorin Basca roles = ['Java Developer'] 436*2835e6bbSSorin Basca } 437*2835e6bbSSorin Basca } 438*2835e6bbSSorin Basca organization { 439*2835e6bbSSorin Basca name = 'OW2' 440*2835e6bbSSorin Basca url = 'http://www.ow2.org/' 441*2835e6bbSSorin Basca } 442*2835e6bbSSorin Basca } 443*2835e6bbSSorin Basca } 444*2835e6bbSSorin Basca } 445*2835e6bbSSorin Basca } 446*2835e6bbSSorin Basca signing { 447*2835e6bbSSorin Basca required rootProject.hasProperty('release') 448*2835e6bbSSorin Basca sign publishing.publications.maven 449*2835e6bbSSorin Basca } 450*2835e6bbSSorin Basca tasks.withType(GenerateModuleMetadata) { enabled = false } 451*2835e6bbSSorin Basca} 452