gradle - Gradle ziptree的中文文件名失败

标签 gradle internationalization zip build.gradle

我有一个包含中文文件夹名的Zipfile。

使用Linux解压缩,Windows Winrar和7Zip可以毫无问题地提取Zipfile

使用Gradles“ziptree”时,总是会出现以下错误:

Could not expand ZIP '/pathToZip/myZip.zip'.

Stacktrace说:
Caused by: org.gradle.api.GradleException: Could not copy zip entry /pathToZip/myZip.zip!somefolderstructure/??/ to '/destination/somefolderstructure/??'.
    at org.gradle.api.internal.file.AbstractFileTreeElement.copyTo(AbstractFileTreeElement.java:79)
    at org.gradle.api.internal.file.copy.DefaultFileCopyDetails.copyTo(DefaultFileCopyDetails.java:106)
    at org.gradle.api.internal.file.copy.FileCopyAction$FileCopyDetailsInternalAction.processFile(FileCopyAction.java:44)
    at org.gradle.api.internal.file.copy.SyncCopyActionDecorator$1$1.processFile(SyncCopyActionDecorator.java:59)
    at org.gradle.api.internal.file.copy.NormalizingCopyActionDecorator$1.maybeVisit(NormalizingCopyActionDecorator.java:98)
    at org.gradle.api.internal.file.copy.NormalizingCopyActionDecorator$1.access$000(NormalizingCopyActionDecorator.java:53)
    at org.gradle.api.internal.file.copy.NormalizingCopyActionDecorator$1$1.processFile(NormalizingCopyActionDecorator.java:65)
    at org.gradle.api.internal.file.copy.DuplicateHandlingCopyActionDecorator$1$1.processFile(DuplicateHandlingCopyActionDecorator.java:60)
    at org.gradle.api.internal.file.copy.CopyFileVisitorImpl.processFile(CopyFileVisitorImpl.java:62)
    at org.gradle.api.internal.file.copy.CopyFileVisitorImpl.visitFile(CopyFileVisitorImpl.java:46)
    at org.gradle.api.internal.file.AbstractFileTree$FilteredFileTreeImpl$1.visitFile(AbstractFileTree.java:181)
    at org.gradle.api.internal.file.archive.ZipFileTree.visit(ZipFileTree.java:91)
    ... 97 more
Caused by: org.gradle.internal.nativeintegration.filesystem.FileException: Could not set file mode 755 on '/destination/somefolderstructure/??'.
    at org.gradle.internal.nativeintegration.filesystem.services.GenericFileSystem.chmod(GenericFileSystem.java:89)
    at org.gradle.api.internal.file.AbstractFileTreeElement.copyTo(AbstractFileTreeElement.java:76)
    ... 108 more
Caused by: net.rubygrapefruit.platform.NativeException: Could not set UNIX mode on /destination/somefolderstructure/??: could not convert string to current locale
    at net.rubygrapefruit.platform.internal.DefaultPosixFiles.setMode(DefaultPosixFiles.java:61)
    at org.gradle.internal.nativeintegration.filesystem.services.NativePlatformBackedChmod.chmod(NativePlatformBackedChmod.java:33)
    at org.gradle.internal.nativeintegration.filesystem.services.GenericFileSystem.chmod(GenericFileSystem.java:87)
    ... 109 more

我已经尝试在gradle.properties中设置文件编码
file.encoding=utf-8

我试图添加一个Gradle参数
-Dfile.encoding=utf-8

我还尝试了不同的Gradle版本:3.4.1和2.14

没事。

更新

这是我的build.gradle(路径与stacktrace不匹配,因为我手动修改了stacktrace):
apply plugin: 'maven'

def defaultEncoding = 'UTF-8'
tasks.withType(AbstractCompile).each {
    it.options.encoding = defaultEncoding
}
tasks.withType(GroovyCompile).each {
    it.groovyOptions.encoding = defaultEncoding
}

configurations {
    mydependencies
}

dependencies {
    mydependencies 'my.group:my-artifact:1.0.0@zip'
}

task copyArtifact(type: Copy) {
    from configurations.mydependencies
    into "$buildDir/zip"
}

task extractZip(type: Sync) {
    from zipTree("$buildDir/zip/my-artifact.zip")
    into "$buildDir/xtract"
}

有任何想法吗?

修改邮政编码是最后的解决方案。

最佳答案

这个怎么样?您的-Dfile.encoding=UTF-8本身就是gradle的编码,但是不会影响编译编码。请在您的build.gradle上使用它。

def defaultEncoding = 'UTF-8'
tasks.withType(AbstractCompile).each {
  it.options.encoding = defaultEncoding
}
tasks.withType(GroovyCompile).each {
  it.groovyOptions.encoding = defaultEncoding
}

关于gradle - Gradle ziptree的中文文件名失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42667930/

相关文章:

java - Java 是否具有与 .NET 资源 (.resx) 文件等效的本地化文件?

ios - 程序化语言本地化,无需重启

java - 如何将字节数组映射写入 ZIP 文件

gradle - 如何根据命令行参数将文件复制到WAR类路径中?

android - 尝试构建应用> 65K(65536)方法时,Android构建项目错误

java - Log4j2 + MongoDb不起作用

c# - zip 函数的用途是什么(如在 Python 或 C# 4.0 中)?

android - Crashlytics (Fabric) 为应用程序变体(构建类型、产品风格)分离组织

java - Spring:ResourceBundleMessageSource是否可以配置为加载xml格式的属性

file - 在 Kotlin 中创建一个 ZIP 文件