0

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

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

提前致谢。

4

1 回答 1

0

似乎 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 任务,错误就消失了。

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

于 2015-10-09T09:13:27.270 回答