Skip to content

Commit d828886

Browse files
committed
Fix the createProjectXml to work like before with Gradle 8
1 parent e585949 commit d828886

1 file changed

Lines changed: 83 additions & 51 deletions

File tree

build.gradle

Lines changed: 83 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -367,85 +367,120 @@ static def makeName(builder, nameR) { builder.name nameR }
367367

368368
static def makeFile(builder, nameR) { builder.file(name:nameR, url:nameR) }
369369

370+
ext.buildDependencyResolver = { configs ->
371+
372+
def allArtifacts = []
373+
def rootDepsByKey = [:]
374+
375+
configs.each { cfg ->
376+
def resolution = cfg.incoming.resolutionResult
377+
378+
resolution.root.dependencies.each { d ->
379+
if (d instanceof ResolvedDependencyResult) {
380+
def id = d.selected.id
381+
if (id instanceof ModuleComponentIdentifier) {
382+
rootDepsByKey["${id.group}:${id.module}"] = d.selected
383+
}
384+
}
385+
}
386+
387+
allArtifacts.addAll(cfg.incoming.artifacts.artifacts)
388+
}
389+
390+
def artifactsByComponent = allArtifacts.groupBy { it.id.componentIdentifier }
391+
392+
def collectTree
393+
collectTree = { component, visited ->
394+
if (!visited.add(component.id)) return []
395+
396+
def result = [component]
397+
398+
component.dependencies.each { d ->
399+
if (d instanceof ResolvedDependencyResult) {
400+
result += collectTree(d.selected, visited)
401+
}
402+
}
403+
404+
return result
405+
}
406+
407+
return { dep ->
408+
def key = "${dep.group}:${dep.name}"
409+
def rootComponent = rootDepsByKey[key]
410+
if (!rootComponent) return []
411+
412+
def components = collectTree(rootComponent, new HashSet())
413+
414+
components.collectMany { comp ->
415+
artifactsByComponent[comp.id] ?: []
416+
}
417+
}
418+
}
419+
370420
tasks.register('createProjectXml') {
371-
dependsOn configurations.corelibs
421+
inputs.files(configurations.corelibs)
422+
inputs.files(configurations.optlibs)
423+
outputs.dir "jme3-project-baselibs/src/com/jme3/gde/project/baselibs/"
372424
doLast {
373425
description = "Creates needed J2SE library and layer XML files in jme3-project-baselibs"
374426

375427
def eol = System.properties.'line.separator'
376428
def j2seLibraries = [] // created J2SE library descriptors
377429

430+
def resolveClosure = buildDependencyResolver([configurations.corelibs, configurations.optlibs])
378431

379-
// for each dependency in corelibs..
380432
def deps = []
381433
deps.addAll(project.configurations.corelibs.dependencies)
382434
deps.addAll(project.configurations.optlibs.dependencies)
435+
383436
deps.each { dep ->
384-
def jmeJarFiles = [] // jme3 jar files
385-
def jmeSourceFiles = [] // jme3 sources
386-
def jmeJavadocFiles = [] // jme3 javadoc
387-
def externalJarFiles = [] // external jar files
388-
if (j2seLibraries.contains(dep.name + ".xml")) {
437+
438+
def name = dep.name
439+
if (j2seLibraries.contains(name + ".xml")) {
389440
return;
390441
}
442+
j2seLibraries.add(name + ".xml")
391443

392-
j2seLibraries.add(dep.name + ".xml")
393-
project.configurations.corelibs.files.findAll { d -> return d.name == dep.name }.each { file ->
394-
if (isSource(file.name)) {
395-
if (!jmeSourceFiles.contains(file.name)) {
396-
jmeSourceFiles.add(file.name)
397-
}
398-
} else if (isJavadoc(file.name)) {
399-
if (!jmeJavadocFiles.contains(file.name)) {
400-
jmeJavadocFiles.add(file.name)
401-
}
402-
} else if (isJmeDep(file.name)) {
403-
if (!jmeJarFiles.contains(file.name)) {
404-
jmeJarFiles.add(file.name)
405-
}
406-
} else {
407-
if (!externalJarFiles.contains(file.name)) {
408-
externalJarFiles.add(file.name)
409-
}
410-
}
411-
}
444+
def artifacts = resolveClosure(dep)
412445

413-
project.configurations.optlibs.files.findAll { d -> return d.name == dep.name }.each { file ->
446+
def jmeJarFiles = [] // jme3 jar files
447+
def jmeSourceFiles = [] // jme3 sources
448+
def jmeJavadocFiles = [] // jme3 javadoc
449+
def externalJarFiles = [] // external jar files
414450

415-
if (isSource(file.name)) {
416-
if (!jmeSourceFiles.contains(file.name)) {
417-
jmeSourceFiles.add(file.name)
418-
}
419-
} else if (isJavadoc(file.name)) {
420-
if (!jmeJavadocFiles.contains(file.name)) {
421-
jmeJavadocFiles.add(file.name)
422-
}
423-
} else if (isJmeDep(file.name)) {
424-
if (!jmeJarFiles.contains(file.name)) {
425-
jmeJarFiles.add(file.name)
426-
}
451+
artifacts.each { art ->
452+
def file = art.file
453+
def fileName = file.name
454+
455+
if (isSource(fileName)) {
456+
if (!jmeSourceFiles.contains(fileName))
457+
jmeSourceFiles.add(fileName)
458+
} else if (isJavadoc(fileName)) {
459+
if (!jmeJavadocFiles.contains(fileName))
460+
jmeJavadocFiles.add(fileName)
461+
} else if (isJmeDep(fileName)) {
462+
if (!jmeJarFiles.contains(fileName))
463+
jmeJarFiles.add(fileName)
427464
} else {
428-
if (!externalJarFiles.contains(file.name)) {
429-
externalJarFiles.add(file.name)
430-
}
465+
if (!externalJarFiles.contains(fileName))
466+
externalJarFiles.add(fileName)
431467
}
432468
}
433469

434470
// Workarounds where the automatic dependency detection did not work. This is mainly when there are runtime dependencies which are not available as artifacts
435-
if (dep.name.equals("jme3-jbullet")) {
471+
if (name == "jme3-jbullet") {
436472
externalJarFiles.add("jbullet.jar")
437473
externalJarFiles.add("stack-alloc.jar")
438474
}
439475

440-
441476
// create J2SE library descriptor xml file
442477
def libraryWriter = new StringWriter()
443478
def libraryXml = new MarkupBuilder(libraryWriter)
444479
// xml.mkp.xmlDeclaration(version:'1.0')
445480
libraryWriter << '<?xml version="1.0" encoding="UTF-8"?>' << eol
446481
libraryWriter << '<!DOCTYPE library PUBLIC "-//NetBeans//DTD Library Declaration 1.0//EN" "http://www.netbeans.org/dtds/library-declaration-1_0.dtd">' << eol
447482
libraryXml.library(version: "1.0", encoding: "UTF-8") {
448-
makeName(libraryXml, "${dep.name}")
483+
makeName(libraryXml, "${name}")
449484
type "j2se"
450485
"localizing-bundle" "com.jme3.gde.project.baselibs.Bundle"
451486
volume {
@@ -458,7 +493,7 @@ tasks.register('createProjectXml') {
458493
* If we would add all those each library would have it's one jme3-core, which might even lead
459494
* to build errors then.
460495
*/
461-
if (dep.name.equals("jme3_xbuf")) {
496+
if (name == "jme3_xbuf") {
462497
jmeJarFiles.each { jar ->
463498
if (jar.startsWith("jme3_xbuf")) {
464499
/* Technically you would only need the loaders, not the spatial viewer,
@@ -487,7 +522,7 @@ tasks.register('createProjectXml') {
487522
}
488523
}
489524
// write XML file
490-
File libraryXmlFile = file("jme3-project-baselibs/src/com/jme3/gde/project/baselibs/${dep.name}.xml");
525+
File libraryXmlFile = file("jme3-project-baselibs/src/com/jme3/gde/project/baselibs/${name}.xml");
491526
libraryXmlFile.write(libraryWriter.toString())
492527
}
493528

@@ -510,9 +545,6 @@ tasks.register('createProjectXml') {
510545
layerXmlFile.write(layerWriter.toString())
511546
}
512547
}
513-
createProjectXml.inputs.files configurations.corelibs.resolve()
514-
createProjectXml.inputs.files configurations.optlibs.resolve()
515-
createProjectXml.outputs.dir "jme3-project-baselibs/src/com/jme3/gde/project/baselibs/"
516548

517549
tasks.register('copyTestSources') {
518550
doLast {

0 commit comments

Comments
 (0)