在liferay 6.1 sdk中使用ant构建时内部编译器错误

时间:2015-10-08 07:35:11

标签: java compiler-errors liferay liferay-6 ecj

当我尝试在6.1.10中编译portlet插件时,我遇到了一个奇怪的问题。

该插件的第一个版本没有任何问题,并在SVN中提交。我创建了这个插件的一个分支和java文件中的一些更改,从那时起我就无法从提示符中编译它(在Liferay Studio 2.2.x中它正确编译)。

所以,现在我在同一个SDK中有相同插件的两个版本,但是第一个版本编译没有问题,第二个版本有以下错误:

[javac] 1. ERROR in /XXXX/liferay-plugins-sdk-6.1.10-ee-ga1/portlets/XXXX-portlet/docroot/WEB-INF/src/XXXX/ObjectFactory.java (at line 0)
[javac]
[javac]     ^
[javac] Internal compiler error
[javac] java.lang.NullPointerException
[javac]     at org.eclipse.jdt.internal.compiler.ast.SingleTypeReference.getTypeBinding(SingleTypeReference.java:44)
[javac]     at org.eclipse.jdt.internal.compiler.ast.TypeReference.internalResolveType(TypeReference.java:130)
[javac]     at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveType(TypeReference.java:197)
[javac]     at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveType(TypeReference.java:193)
[javac]     at org.eclipse.jdt.internal.compiler.ast.Annotation.resolveType(Annotation.java:231)
[javac]     at org.eclipse.jdt.internal.compiler.ast.ASTNode.resolveAnnotations(ASTNode.java:594)
[javac]     at org.eclipse.jdt.internal.compiler.apt.dispatch.AnnotationDiscoveryVisitor.resolveAnnotations(AnnotationDiscoveryVisitor.java:143)
[javac]     at org.eclipse.jdt.internal.compiler.apt.dispatch.AnnotationDiscoveryVisitor.visit(AnnotationDiscoveryVisitor.java:131)
[javac]     at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.traverse(TypeDeclaration.java:1198)
[javac]     at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.traverse(CompilationUnitDeclaration.java:687)
[javac]     at org.eclipse.jdt.internal.compiler.apt.dispatch.RoundEnvImpl.<init>(RoundEnvImpl.java:56)
[javac]     at org.eclipse.jdt.internal.compiler.apt.dispatch.BaseAnnotationProcessorManager.processAnnotations(BaseAnnotationProcessorManager.java:148)
[javac]     at org.eclipse.jdt.internal.compiler.Compiler.processAnnotations(Compiler.java:794)
[javac]     at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:423)
[javac]     at org.eclipse.jdt.internal.compiler.batch.Main.performCompilation(Main.java:3543)
[javac]     at org.eclipse.jdt.internal.compiler.batch.Main.compile(Main.java:1645)
[javac]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[javac]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
[javac]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[javac]     at java.lang.reflect.Method.invoke(Method.java:597)
[javac]     at org.eclipse.jdt.core.JDTCompilerAdapter.execute(JDTCompilerAdapter.java:79)

我检查了两个构建的类路径,它们与插件文件夹的名称相同。由于它们构建在相同的SDK中,它们使用相同的java,相同的编译器,门户等.java版本是1.6.0_65,但问题也可以在不同的机器中重现。

此外,编译失败的类在两个项目中是相同的。

提前致谢。

1 个答案:

答案 0 :(得分:0)

似乎liferay 6.1.10 SDK使用了一个非常古老的ecj.jar(版本3.4.1)。我从ant lib目录中删除了ecj.jar(由liferay sdk复制),并用ecj 3.5.1替换了sdk lib目录的ecj.jar。随着下一场“蚂蚁战争”#39;新的ecj.jar被复制到ant lib目录中,并且随着另一次war任务的运行,错误消失了。

请参阅上述评论中的eclipse bugzilla中的错误。