xref: /aosp_15_r20/external/ow2-asm/build.gradle (revision 2835e6bb194a25e32dae2cc0628d8f988b82bfc0)
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