Как я могу создать дорожную банку в Gradle - PullRequest
6 голосов
/ 25 марта 2011

При запуске groovyc в Windows env у меня возникают проблемы из-за длины пути к классам в моей ситуации.Я хотел бы обойти эту проблему, создав дорожную банку, а затем поместив эту банку на cp.Как я могу создать jar-файл пути со всеми записями пути к классам, автоматически определенными в gradle, а затем добавить этот jar-файл в cp?

Ответы [ 2 ]

9 голосов
/ 25 марта 2011

Вот проверенное решение:

task pathingJar(type: Jar) {
  appendix = "pathing"
  doFirst {
    manifest {
      attributes "Class-Path": configurations.compile.files.join(" ")
    }
  }
}

compileGroovy {
    dependsOn(pathingJar)
    classpath = files(pathingJar.archivePath)
}    

В зависимости от ваших точных требований, вам, возможно, придется немного подстроить его.Например, если у вас есть тесты, написанные на Groovy, вам также понадобится Jar-путь для пути к классу тестовой компиляции.В этом случае вам нужно будет повторить приведенную выше конфигурацию следующим образом:

task testPathingJar(type: Jar) {
  appendix = "testPathing"
  doFirst {
    manifest {
      attributes "Class-Path": configurations.testCompile.files.join(" ")
    }
  }
}

compileTestGroovy {
    dependsOn(testPathingJar)
    classpath = files(testPathingJar.archivePath)
}    
5 голосов
/ 15 февраля 2012

У меня наконец-то появилась идея «дорожка баночки». Я считаю, что это постоянный обходной путь. Это можно считать решением, если оно станет частью самого gradle.

Оригинальный Jar-код пути был предоставлен Питером, но он не работал. Проблема: элементы classpath, на которые есть ссылки в банке маршрутизации, должны относиться к местоположению банки маршрутизации. Так что, похоже, это работает для меня.

task pathingJar(type: Jar , dependsOn: 'cleanPathingJar') {
/**
 * If the gradle_user_home env var has been set to 
     * C:\ on a Win7 machine, we may not have permission to write the jar to
 * this directory, so we will write it to the caches subdir instead.  
     * This assumes a caches subdir containing the jars
 * will always exist.
 */
gradleUserHome = new File(gradle.getGradleUserHomeDir(), "caches")

relativeClasspathEntries = configurations.compile.files.collect {
    new File(gradleUserHome.getAbsolutePath()).toURI().
                  relativize(new File(it.getAbsolutePath()).toURI()).getPath()
}
appendix = "pathing"
destinationDir = gradleUserHome
doFirst {
    manifest {
        attributes "Class-Path": relativeClasspathEntries.join(" ")
    }
}
}

compileGroovy {
    dependsOn(pathingJar)
    classpath = files(pathingJar.archivePath)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...