【问题标题】:Internal Compiler Error while building with ant in liferay 6.1 sdk在 liferay 6.1 sdk 中使用 ant 构建时出现内部编译器错误
【发布时间】:2015-10-08 07:35:10
【问题描述】:

当我尝试在 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,但问题也可以在不同的机器上重现。

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

提前致谢。

【问题讨论】:

  • NullPointerException 在这个位置意味着您在 Eclipse(组件 JDT/Core)中遇到了一个错误。请在bugs.eclipse.org/bugs/… 提交错误,您将被询问更多调查所需的详细信息。
  • 感谢您的建议。如果有人有兴趣,这里是错误的link

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


【解决方案1】:

liferay 6.1.10 SDK 似乎使用了一个非常旧的 ecj.jar(版本 3.4.1)。我从ant lib目录中删除了ecj.jar(由liferay sdk复制到那里),并将sdk lib目录的ecj.jar替换为ecj 3.5.1。在下一次“ant war”中,新的 ecj.jar 被复制到 ant lib 目录中,并且再次运行 war 任务,错误就消失了。

另请参阅上述 cmets 中的 eclipse bugzilla 中的错误。

【讨论】:

  • 要更新安装中的 ecj.jar,您必须执行以下步骤:1)将文件 ecj.jar 替换为最新的文件,2)从 ant lib 目录中删除 ecj.jar , 3) 运行 ant war 任务将新的 ecj.jar 复制到 ant lib 目录中(这看起来像是一个错误,但实际上不是),4) 再次运行 ant war 以构建您的插件。
  • 为什么不更新到最近的版本?最新版本是 4.5.1 而不是 3.5.1。见download.eclipse.org/eclipse/downloads/drops4/…