ClosureJavascriptFramework
ClosureJavascriptFramework copied to clipboard
Closure Compiler upgrade
In v1.18.1
we use closure compiler version v20131014
by default. There has been several releases since then (see https://github.com/google/closure-compiler/wiki/Releases). We should consider upgrading the closure compiler and start plan for a new release (v1.18.2
?) that will be using it by default.
I tried to switch to compiler v20140508
<plugin>
<groupId>com.github.jlgrock.javascript-framework</groupId>
<artifactId>closure-compiler-maven-plugin</artifactId>
<version>1.18.1</version>
<dependencies>
<dependency>
<groupId>com.google.javascript</groupId>
<artifactId>closure-compiler</artifactId>
<version>v20140508</version>
</dependency>
</dependencies>
</plugin>
and I got the following error during compilation
[ERROR] Failed to execute goal com.github.jlgrock.javascript-framework:closure-compiler-maven-plugin:1.18.1:js-closure-compile (default-js-closure-compile) on project core: Execution default-js-closure-compile of goal com.github.jlgrock.javascript-framework:closure-compiler-maven-plugin:1.18.1:js-closure-compile failed: An API incompatibility was encountered while executing com.github.jlgrock.javascript-framework:closure-compiler-maven-plugin:1.18.1:js-closure-compile: java.lang.NoSuchFieldError: checkUnreachableCode
[ERROR] -----------------------------------------------------
[ERROR] realm = plugin>com.github.jlgrock.javascript-framework:closure-compiler-maven-plugin:1.18.1
[ERROR] strategy = org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy
[ERROR] urls[0] = file:/Users/lukas/.m2/repository/com/github/jlgrock/javascript-framework/closure-compiler-maven-plugin/1.18.1/closure-compiler-maven-plugin-1.18.1.jar
[ERROR] urls[1] = file:/Users/lukas/.m2/repository/com/google/javascript/closure-compiler/v20140508/closure-compiler-v20140508.jar
[ERROR] urls[2] = file:/Users/lukas/.m2/repository/com/google/javascript/closure-compiler-rhino/v20140508/closure-compiler-rhino-v20140508-shaded.jar
[ERROR] urls[3] = file:/Users/lukas/.m2/repository/com/google/javascript/closure-compiler-externs/v20140508/closure-compiler-externs-v20140508.jar
[ERROR] urls[4] = file:/Users/lukas/.m2/repository/args4j/args4j/2.0.26/args4j-2.0.26.jar
[ERROR] urls[5] = file:/Users/lukas/.m2/repository/com/google/guava/guava/17.0/guava-17.0.jar
[ERROR] urls[6] = file:/Users/lukas/.m2/repository/com/google/protobuf/protobuf-java/2.5.0/protobuf-java-2.5.0.jar
[ERROR] urls[7] = file:/Users/lukas/.m2/repository/org/json/json/20090211/json-20090211.jar
[ERROR] urls[8] = file:/Users/lukas/.m2/repository/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.jar
[ERROR] urls[9] = file:/Users/lukas/.m2/repository/org/codehaus/plexus/plexus-utils/2.0.4/plexus-utils-2.0.4.jar
[ERROR] urls[10] = file:/Users/lukas/.m2/repository/org/codehaus/plexus/plexus-component-annotations/1.5.5/plexus-component-annotations-1.5.5.jar
[ERROR] urls[11] = file:/Users/lukas/.m2/repository/org/sonatype/sisu/sisu-inject-bean/1.4.3.1/sisu-inject-bean-1.4.3.1.jar
[ERROR] urls[12] = file:/Users/lukas/.m2/repository/org/sonatype/sisu/sisu-guice/2.9.1/sisu-guice-2.9.1-noaop.jar
[ERROR] urls[13] = file:/Users/lukas/.m2/repository/com/github/jlgrock/javascript-framework/maven-utils/1.18.1/maven-utils-1.18.1.jar
[ERROR] urls[14] = file:/Users/lukas/.m2/repository/backport-util-concurrent/backport-util-concurrent/3.1/backport-util-concurrent-3.1.jar
[ERROR] urls[15] = file:/Users/lukas/.m2/repository/org/codehaus/plexus/plexus-interpolation/1.11/plexus-interpolation-1.11.jar
[ERROR] urls[16] = file:/Users/lukas/.m2/repository/commons-lang/commons-lang/2.5/commons-lang-2.5.jar
[ERROR] urls[17] = file:/Users/lukas/.m2/repository/commons-io/commons-io/2.3/commons-io-2.3.jar
[ERROR] urls[18] = file:/Users/lukas/.m2/repository/log4j/log4j/1.2.16/log4j-1.2.16.jar
[ERROR] urls[19] = file:/Users/lukas/.m2/repository/junit/junit/4.11/junit-4.11.jar
[ERROR] urls[20] = file:/Users/lukas/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar
[ERROR] Number of foreign imports: 1
[ERROR] import: Entry[import from realm ClassRealm[project>org.jboss.search.web-ui:core:0.9.0, parent: ClassRealm[maven.api, parent: null]]]
So it seems that code modification will be needed to allow this version of closure compiler.
Trying all official releases from https://github.com/google/closure-compiler/wiki/Releases with the latest version of CJF (v1.18.1):
-
v20140508
:x: An API incompatibility was encountered while executing com.github.jlgrock.javascript-framework:closure-compiler-maven-plugin:1.18.1:js-closure-compile: java.lang.NoSuchFieldError: checkUnreachableCode -
v20140407
:x: Seems to fail for the same reason asv20140508
-
v20140303
:question: Is not found in mvn repo? -
v20140110
:question: Is not found in mvn repo? -
v20131118
:question: Is not found in mvn repo? -
v20131014
:white_check_mark: This is what CJF v1.18.1 uses by default, works fine.
Used MVN repo: http://mvnrepository.com/artifact/com.google.javascript/closure-compiler
Based on this, shall we release a new CJF version that can support both v20140407
and v20140508
(I assume it will be the same breaking change)?
Shall we also document which CJF versions can be used with which compiler versions?
We should consider releasing new version based on recent compiler and library versions. Some exciting news are ahead. See https://plus.google.com/104107397146106399613/posts/Ws5Hi5B14si