2011-03-25 135 views
5

在Windows环境中运行groovyc时,由于类路径的长度,我遇到了问题,在我的情况下。我想通过创建一个路径jar来解决这个问题,然后把这个jar放在cp上。我如何创建一个path/jar /所有在Gradle中自动指定的类路径条目,然后将该jar添加到cp中?如何在Gradle中创建路径jar

回答

3

我终于拿到了“寻路罐子”的想法来工作。我认为这是一个永久的解决方法。如果它成为gradle本身的一部分,这可以被认为是一种解决方案。

原始的路径jar代码是由Peter提供的,但它不起作用。问题:路径jar中引用的classpath元素必须相对于路径jar的位置。所以,这似乎对我有用。

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) 
} 
+1

但是这似乎不包含当前项目的jar文件在类路径中? – 2014-01-13 07:08:13

+1

这[在3.0.8之间的Groovy版本中不起作用](https://github.com/grails/grails-core/issues/9300)。链接的Grails问题还包括一个完整的解决方法,使用这种方法。 – 2015-11-26 13:50:54

8

这里是一个测试的解决方案:

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) 
}  
+0

哇,Peter Niederwieser自己的回答!谢谢!我希望尽快尝试一下。顺便说一下,Spock很壮观。 – 2011-03-27 02:12:34

+0

后续问题:这似乎没有按预期工作。路径的jar被创建,但是当我编译时将路径jar添加到classpath中,出于某种原因,编译失败并且抱怨丢失了在路径jar中引用的jar ... – 2011-04-04 14:16:23

+0

我在想这会不起作用,因为这指定了清单中罐子的绝对路径。在这种情况下,不清楚绝对路径是否有效。 – 2011-04-04 15:15:44