首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Gradle中创建pathing jar

如何在Gradle中创建pathing jar
EN

Stack Overflow用户
提问于 2011-03-25 23:21:04
回答 3查看 13K关注 0票数 8

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-15 10:52:02

我终于实现了"pathing jar“的想法。我认为这是一个永久性的变通方法。如果它是gradle本身的一部分,这可以被认为是一种解决方案。

最初的pathing jar代码是由Peter提供的,但它不起作用。问题: pathing jar中引用的类路径元素必须相对于pathing jar的位置。所以,这看起来对我很有效。

代码语言:javascript
复制
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)
}
票数 5
EN

Stack Overflow用户

发布于 2011-03-26 02:41:04

下面是一个经过测试的解决方案:

代码语言:javascript
复制
task pathingJar(type: Jar) {
  appendix = "pathing"
  doFirst {
    manifest {
      attributes "Class-Path": configurations.compile.files.join(" ")
    }
  }
}

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

根据您的确切需求,您可能需要对此进行一些调整。例如,如果您的测试是用Groovy编写的,那么您还需要一个pathing Jar作为测试编译类路径。在这种情况下,您需要重复上述配置,如下所示:

代码语言:javascript
复制
task testPathingJar(type: Jar) {
  appendix = "testPathing"
  doFirst {
    manifest {
      attributes "Class-Path": configurations.testCompile.files.join(" ")
    }
  }
}

compileTestGroovy {
    dependsOn(testPathingJar)
    classpath = files(testPathingJar.archivePath)
}    
票数 12
EN

Stack Overflow用户

发布于 2020-10-15 18:49:47

这是对我有帮助的:

"The filename or extension is too long error" using gradle

换句话说:使用com.github.ManifestClasspath插件。

其他解决方案对我不起作用,因为实际的项目主类在执行时没有包含在类路径中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5434482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档