简体   繁体   English

如何从Java提取RPM文件到特定的package

[英]How to extract RPM files to specific package from Java

I want to extract a rpm file to target directory from Java code.我想从 Java 代码中提取一个 rpm 文件到目标目录。 I'm aware of the following approaches:我知道以下方法:

  • Run rpm2cpio mypackage.rpm | (cd /target/dir; cpio -idmv)运行rpm2cpio mypackage.rpm | (cd /target/dir; cpio -idmv) rpm2cpio mypackage.rpm | (cd /target/dir; cpio -idmv) as command line. rpm2cpio mypackage.rpm | (cd /target/dir; cpio -idmv)作为命令行。 This is not really Java and I worry the portability by hardcoding this command.这不是真正的 Java,我担心硬编码这个命令的可移植性。
  • Use CpioArchiveInputStream .使用CpioArchiveInputStream I hit java.io.IOException: Unknown magic when trying to read the rpm file.我在尝试读取 rpm 文件时遇到了java.io.IOException: Unknown magic My guess is that this library is too old to adapt to new archive/compression types.我的猜测是这个库太旧而无法适应新的存档/压缩类型。

Is there a better approach that I'm not aware of?有没有我不知道的更好的方法? Ideally something that works like a TarArchiveInputStream would be perfect.理想情况下,像TarArchiveInputStream这样工作的东西是完美的。

This is the middle ground that I found working:这是我发现可行的中间立场:

Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(String.format("rpm2cpio %s", packagePath));
try (CpioArchiveInputStream cpioStream = new CpioArchiveInputStream(proc.getInputStream())) {
    System.out.println(cpioStream.getNextCPIOEntry().getName());
}

Not perfect, but makes it easier so that we only rely on a new process to read file.不完美,但更容易让我们只依赖一个新进程来读取文件。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM