0

我的项目中有一个用例,我必须在准备 jar 时修改类文件内容并使用自定义类加载器来加载该类。

为了实现上述场景,我CopySpec在我的build.gradle. 令人惊讶的是,它适用于小类文件,而不适用于大文件。有什么我想念的吗?

def contentSpec = copySpec {
    from {
        configurations.runtime.collect {it.isDirectory() ? it : zipTree(it)}
    }
    eachFile (new Action<FileCopyDetails>() {
        @Override
        void execute(FileCopyDetails fileCopyDetails) {
            if (fileCopyDetails.getPath().contains('abc')) {
                println fileCopyDetails.getPath()
                byte[] content = fileCopyDetails.file.bytes;
                byte[] newContent = encryptClass.encrypt(content)
                println ("${content.length} -> ${newContent.length}")
                fileCopyDetails.file.bytes = newContent
                println fileCopyDetails.file.bytes.length
                fileCopyDetails.setName(fileCopyDetails.getName().replace(".class",".enc"))
            }
        }
    })
    with jar
}

例如,我有一个名为 AbcConfig.class 的文件,println 语句打印如下:它显示 33232 字节写入(修改后)com/abc/xyz/config/AbcConfig.class 33216 -> 33232 33232

但是当我提取 jar 并执行 ls -lrt 以检查磁盘上特定字节的数量时,它显示(输出中的 33202)

-rwxrwxrwx 1 根 33202 8 月 3 日 13:02 AbcConfig.enc

4

0 回答 0