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.