Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Gradle调用7zip来取消Jar的签名_Gradle - Fatal编程技术网

如何从Gradle调用7zip来取消Jar的签名

如何从Gradle调用7zip来取消Jar的签名,gradle,Gradle,我想在gradle中批量取消一些jar的签名,但我不想使用,因为它太慢了 使用7zip命令行要快得多: 7z.exe d activemq-pool-5.7.0.jar META-INF/SIGFILE.* 其中SIGFILE是上一个签名的名称 我正试图在格拉德尔这样做 println "Unsigning jars" file(unsignedFolder + "/jars").listFiles().each { File file -> exec {

我想在gradle中批量取消一些jar的签名,但我不想使用,因为它太慢了

使用7zip命令行要快得多:

7z.exe d activemq-pool-5.7.0.jar META-INF/SIGFILE.*
其中SIGFILE是上一个签名的名称

我正试图在格拉德尔这样做

    println "Unsigning jars"
    file(unsignedFolder + "/jars").listFiles().each { File file ->
        exec {
            workingDir '../tools'
            commandLine '7z.exe', 'd', file.absolutePath, 'META-INF/SIGFILE.*'              
        }
    }   
但是,我得到了一个错误:

Starting process 'command '7z.exe''. Working directory: D:\code\project\tools Command: 7z.exe d D:\code\project\build\unsigned\jars\activemq-pool-5.7.0.jar META-INF/SIGFILE.*
:signWebstart FAILED
:signWebstart (Thread[Daemon,5,main]) completed. Took 0.109 secs.

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':unsignJars'.
> A problem occurred starting process 'command '7z.exe''
多亏了他,我才意识到这应该是什么

我现在使用的是7zip-7za的命令行版本。上还有一个unix版本,因此我将它们与我的脚本一起打包,并使用以下内容:

import org.apache.tools.ant.taskdefs.condition.Os

task unSignJars() {
  if(Os.isFamily(Os.FAMILY_WINDOWS)) {
    println "*** WINDOWS "
    exec {
        executable "7za.exe"
        args "d", "temp.jar", "META-INF/SIGN.RSA"
    }
  } else if(Os.isFamily(Os.FAMILY_UNIX)) {
    println "*** UNIX "
    exec {
        executable "7za"
        args "d", "temp.jar", "META-INF/SIGN.RSA"
    }
  } else {
    println "*** NOT SUPPORTED "
  }
}
此方法的速度是使用JavaNIO的两倍,JavaNIO本身的速度是OP中提到的ant方法的两倍

import java.util.*;
import java.net.URI;
import java.nio.file.Path;
import java.nio.file.*;
import java.nio.file.StandardCopyOption;
public class ZPFSDelete {
    public static void main(String [] args) throws Exception {

        /* Define ZIP File System Properies in HashMap */    
        Map<String, String> zip_properties = new HashMap<>(); 
        /* We want to read an existing ZIP File, so we set this to False */
        zip_properties.put("create", "false"); 

        /* Specify the path to the ZIP File that you want to read as a File System */
        URI zip_disk = URI.create("jar:file:/my_zip_file.zip");

        /* Create ZIP file System */
        try (FileSystem zipfs = FileSystems.newFileSystem(zip_disk, zip_properties)) {
            /* Get the Path inside ZIP File to delete the ZIP Entry */
            Path pathInZipfile = zipfs.getPath("source.sql");
            System.out.println("About to delete an entry from ZIP File" + pathInZipfile.toUri() ); 
            /* Execute Delete */
            Files.delete(pathInZipfile);
            System.out.println("File successfully deleted");   
        } 
    }
}
import java.util.*;
导入java.net.URI;
导入java.nio.file.Path;
导入java.nio.file.*;
导入java.nio.file.StandardCopyOption;
公共类ZPFSDelete{
公共静态void main(字符串[]args)引发异常{
/*在HashMap*中定义ZIP文件系统属性
Map zip_properties=new HashMap();
/*我们想读取一个现有的ZIP文件,所以将其设置为False*/
zip_properties.put(“创建”、“假”);
/*指定要作为文件系统读取的ZIP文件的路径*/
URI zip_disk=URI.create(“jar:file:/my_zip_file.zip”);
/*创建ZIP文件系统*/
try(FileSystem zipfs=FileSystems.newFileSystem(zip\u磁盘,zip\u属性)){
/*获取ZIP文件内的路径以删除ZIP条目*/
Path pathInZipfile=zipfs.getPath(“source.sql”);
System.out.println(“即将从ZIP文件中删除条目”+pathInZipfile.toUri());
/*执行删除*/
文件。删除(pathInZipfile);
System.out.println(“文件已成功删除”);
} 
}
}

然而,unix zip-d的速度又提高了一倍,但它不可移植。

不应该是以
cmd/c
启动的win命令吗?