@@ -367,85 +367,120 @@ static def makeName(builder, nameR) { builder.name nameR }
367367
368368static 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+
370420tasks. 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
517549tasks. register(' copyTestSources' ) {
518550 doLast {
0 commit comments