Aspectj中的重复条目

时间:2014-11-07 11:31:37

标签: apache-pig aspectj

当我尝试使用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

任何人都可以告诉我原因吗?

1 个答案:

答案 0 :(得分:0)

  • 嗯,首先 ajc 不知道任何-extdirs参数,AFAIK。
  • 我也觉得很奇怪你的外表与伤害同名,只是在另一个子目录中。这使得在下次编织或仅使用库时很容易将一个错误归咎于另一个。
  • "重复条目"事情可能来自 pig.jar Aspects.jar 中包含的同一个类。 " may"这是一个错误的猜测,请参阅下面的评论部分中的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的同一个类的原因。您甚至知道要搜索哪一个:org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.Add

<小时/> 更新2:

我已经能够使用包含相同类文件的 inpath 中的两个 JAR或目录重现该问题。如果您的命令行如何能够获得该错误真的只有 inpath 上的一个条目,如你的问题所示,对我来说仍然是一个谜。无论如何,我已经为此问题提交了bug ticket