Jaroslav Kuboš Jaroslav Kuboš I prefer to discover a causality rather than become a king of Persia. --Democritus

Gradle + Eclipse plugin: Add AspectJ nature into projects

12.11.2015

I have found nice script for adding AspectJ nature into Eclipse project using Gradle. See https://github.com/breskeby/gradleplugins/blob/0.9-upgrade/aspectjPlugin/aspectJ.gradle#L29 . Unfortunately each run of 'gradle eclipse' adds new nodes into project XML. Here is my fix of that issue:

eclipse.project.file.withXml { xmlProvider-> 
    def projectDescription = xmlProvider.asNode() 
    def xmlparser = new XmlParser() 
    def builders = projectDescription.buildSpec[0] 

    if (!builders.buildCommand.any {it.name[0].value()=='org.eclipse.ajdt.core.ajbuilder'}) {
        def ajbuilder = xmlparser.createNode(builders, 'buildCommand', [:])

        xmlparser
            .createNode(ajbuilder, 'name', [:])
            .setValue('org.eclipse.ajdt.core.ajbuilder') 

        xmlparser.createNode(ajbuilder, 'arguments', [:]);
    } 

    def natures = projectDescription.natures[0] 

    if (!natures.nature.any {it.value()=='org.eclipse.ajdt.ui.ajnature'}) { 
        def ajnature = xmlparser.createNode(null, 'nature', [:]) 
        ajnature.setValue('org.eclipse.ajdt.ui.ajnature'); 
        natures.children().add(0, ajnature) 
    } 
}

Then all nodes are created only once.

Tagy: Gradle, Java, Eclipse