8

Windows環境でgroovycを実行すると、私の状況では、クラスパスの長さが原因で問題が発生します。パスするjarを作成してこれを回避し、そのjarをcpに配置したいと思います。gradleで自動的に指定されたすべてのクラスパスエントリを使用してパスjarを作成し、そのjarをcpに追加するにはどうすればよいですか?

4

3 に答える 3

12

テストされたソリューションは次のとおりです。

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)
}    
于 2011-03-25T18:41:03.623 に答える
5

私はついに「パスジャー」のアイデアを機能させることができました。これは永続的な回避策だと思います。これは、gradle自体の一部になっている場合、解決策と見なすことができます。

元のパスjarコードはPeterによって提供されましたが、機能しませんでした。問題:パスjarで参照されるクラスパス要素は、パス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)
}
于 2012-02-15T02:52:02.387 に答える
0

これが私を助けたものです:

gradleを使用した「ファイル名または拡張子が長すぎるエラー」

つまり、com.github.ManifestClasspathプラグインを使用します。

実際のプロジェクトのメインクラスが実行時にクラスパスに含まれなくなったため、他のソリューションは機能しませんでした。

于 2020-10-15T10:49:46.857 に答える