aspectj中的重复条目

l7wslrjt  于 2021-06-21  发布在  Pig
关注(0)|答案(1)|浏览(347)

当我尝试使用aspectj代码编织jar文件时,我得到了

java.util.zip.ZipException: duplicate entry org/apache/pig/backend/hadoop/execu
tionengine/physicalLayer/expressionOperators/Add.class

我使用以下命令来编织jar文件

ajc -inpath C:\pig.jar -aspectpath C:\Aspects.jar -extdirs C:\libs -outjar C:\pig\pig.jar

有人能告诉我为什么吗?

pkbketx9

pkbketx91#

首先,ajc不知道 -extdirs 阿法伊克,帕拉马特。
我也觉得很奇怪,你的outjar和injar同名,只是在另一个子目录中。这使得在下一次编织或仅仅使用库时,很容易把一个错当成另一个。
“duplicate entry”可能来自pig.jar和aspects.jar中包含的同一个类。“maybe”是一个错误的猜测,请参阅下面评论部分中andy clement和我之间的讨论。更新2中描述了真正的原因。
更新:
那么,在打包outjar时,您提到的异常怎么会发生呢?

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.jar.JarOutputStream;
import java.util.zip.ZipEntry;

public class ZipExceptionDemo {
    public static void main(String[] args) throws IOException {
        try (JarOutputStream stream = new JarOutputStream(new FileOutputStream("foo.jar"))) {
            stream.putNextEntry(new ZipEntry("com/foo/One.class"));
            stream.putNextEntry(new ZipEntry("com/foo/Two.class"));
            stream.putNextEntry(new ZipEntry("com/foo/UhOh.class"));
            stream.putNextEntry(new ZipEntry("com/foo/UhOh.class"));  // uh-oh!
        }
    }
}
Exception in thread "main" java.util.zip.ZipException: duplicate entry: com/foo/UhOh.class
    at java.util.zip.ZipOutputStream.putNextEntry(ZipOutputStream.java:215)
    at java.util.jar.JarOutputStream.putNextEntry(JarOutputStream.java:109)
    at ZipExceptionDemo.main(ZipExceptionDemo.java:12)

现在你的工作是找出为什么你在多个jar里有相同的类,你想把它们混合到一个jar里。你甚至知道要搜索哪一个: org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.Add .
更新2:
我已经能够用inpath上包含相同类文件的两个jar或目录重现这个问题。如果您的命令行在inpath上只有一个条目(如您的问题所示),那么您是如何得到这个错误的,对我来说仍然是个谜。不管怎样,我已经为这个问题提交了一份错误通知单。

相关问题