May 20, 2010

Gradle and IntelliJ IDEA

Posted in Dev at 8:14 by djn

At work, I’ve been migrating a legacy build system to gradle. We use IntelliJ IDEA as IDE and the integration between the two is quite barebones.

Inspired by Felipe Cypriano, I extended his task to sync dependencies from Gradle to IDEA in a multiproject build.

It creates a library file for each subproject and each configuration (if it contains any dependencies). Project dependencies are ignored.

Read more for source 🙂

task syncIdeaLibraries << {
  description = 'Add gradle dependecies for each project to IntelliJ project libraries'

  final File librariesDir = new File(".idea${File.separator}libraries")

  def createLibrary = { fileName, libraryName, jars ->
    final def gradleLibXml = new File(librariesDir, fileName)
    gradleLibXml.write '''
  <component name=\"libraryTable\">
  <library name=\"''' + String.valueOf(libraryName) + '''\"/>

    final def xmlRoot = new XmlParser().parse(gradleLibXml)
    final def classesNode = xmlRoot.library[0].appendNode('CLASSES')

    jars.each { jar ->
      classesNode.appendNode('root', [url: "jar://${jar.trim()}!/"])

    def writer = new StringWriter()
    new XmlNodePrinter(new PrintWriter(writer)).print(xmlRoot)
    gradleLibXml.write writer.toString()
    println "File '${gradleLibXml.path}' updated"

  println "Idea library path: ${librariesDir.path}"
  final File userHomeGradle = project.gradle.gradleUserHomeDir
  println "Set the USER_HOME_GRADLE variable to '$userHomeGradle.path'"
  project.subprojects.each { p ->
    p.configurations.each { c ->
      if (!c.dependencies.isEmpty()) {
        def jars = c.files.collect { f ->
          if (f.path.startsWith(userHomeGradle.path)) {
        createLibrary "Gradle_${}_${}.xml", "Gradle ${} ${}", jars


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: