You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2017/10/17 19:45:43 UTC
svn commit: r1812448 - in /tomcat/tc7.0.x/trunk:
java/org/apache/jasper/compiler/JDTCompiler.java webapps/docs/changelog.xml
Author: markt
Date: Tue Oct 17 19:45:43 2017
New Revision: 1812448
URL: http://svn.apache.org/viewvc?rev=1812448&view=rev
Log:
Enable Tomcat 7 to compile JSPs for Java 9.
Modified:
tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/JDTCompiler.java
tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
Modified: tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/JDTCompiler.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/JDTCompiler.java?rev=1812448&r1=1812447&r2=1812448&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/JDTCompiler.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/JDTCompiler.java Tue Oct 17 19:45:43 2017
@@ -5,9 +5,9 @@
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -54,7 +54,7 @@ import org.eclipse.jdt.internal.compiler
/**
* JDT class compiler. This compiler will load source dependencies from the
- * context classloader, reducing dramatically disk access during
+ * context classloader, reducing dramatically disk access during
* the compilation process.
*
* @author Cocoon2
@@ -63,8 +63,8 @@ import org.eclipse.jdt.internal.compiler
public class JDTCompiler extends org.apache.jasper.compiler.Compiler {
private final Log log = LogFactory.getLog(JDTCompiler.class); // must not be static
-
- /**
+
+ /**
* Compile the servlet from .java file to .class file
*/
@Override
@@ -75,19 +75,19 @@ public class JDTCompiler extends org.apa
if (log.isDebugEnabled()) {
t1 = System.currentTimeMillis();
}
-
+
final String sourceFile = ctxt.getServletJavaFileName();
final String outputDir = ctxt.getOptions().getScratchDir().getAbsolutePath();
String packageName = ctxt.getServletPackageName();
- final String targetClassName =
- ((packageName.length() != 0) ? (packageName + ".") : "")
+ final String targetClassName =
+ ((packageName.length() != 0) ? (packageName + ".") : "")
+ ctxt.getServletClassName();
final ClassLoader classLoader = ctxt.getJspLoader();
String[] fileNames = new String[] {sourceFile};
String[] classNames = new String[] {targetClassName};
final ArrayList<JavacErrorDetail> problemList =
new ArrayList<JavacErrorDetail>();
-
+
class CompilationUnit implements ICompilationUnit {
private final String className;
@@ -102,7 +102,7 @@ public class JDTCompiler extends org.apa
public char[] getFileName() {
return sourceFile.toCharArray();
}
-
+
@Override
public char[] getContents() {
char[] result = null;
@@ -117,7 +117,7 @@ public class JDTCompiler extends org.apa
char[] chars = new char[8192];
StringBuilder buf = new StringBuilder();
int count;
- while ((count = reader.read(chars, 0,
+ while ((count = reader.read(chars, 0,
chars.length)) > 0) {
buf.append(chars, 0, count);
}
@@ -144,7 +144,7 @@ public class JDTCompiler extends org.apa
}
return result;
}
-
+
@Override
public char[] getMainTypeName() {
int dot = className.lastIndexOf('.');
@@ -153,10 +153,10 @@ public class JDTCompiler extends org.apa
}
return className.toCharArray();
}
-
+
@Override
public char[][] getPackageName() {
- StringTokenizer izer =
+ StringTokenizer izer =
new StringTokenizer(className, ".");
char[][] result = new char[izer.countTokens()-1][];
for (int i = 0; i < result.length; i++) {
@@ -175,7 +175,7 @@ public class JDTCompiler extends org.apa
final INameEnvironment env = new INameEnvironment() {
@Override
- public NameEnvironmentAnswer
+ public NameEnvironmentAnswer
findType(char[][] compoundTypeName) {
StringBuilder result = new StringBuilder();
String sep = "";
@@ -188,8 +188,8 @@ public class JDTCompiler extends org.apa
}
@Override
- public NameEnvironmentAnswer
- findType(char[] typeName,
+ public NameEnvironmentAnswer
+ findType(char[] typeName,
char[][] packageName) {
StringBuilder result = new StringBuilder();
String sep = "";
@@ -202,24 +202,24 @@ public class JDTCompiler extends org.apa
result.append(typeName);
return findType(result.toString());
}
-
+
private NameEnvironmentAnswer findType(String className) {
InputStream is = null;
try {
if (className.equals(targetClassName)) {
- ICompilationUnit compilationUnit =
+ ICompilationUnit compilationUnit =
new CompilationUnit(sourceFile, className);
- return
+ return
new NameEnvironmentAnswer(compilationUnit, null);
}
- String resourceName =
+ String resourceName =
className.replace('.', '/') + ".class";
is = classLoader.getResourceAsStream(resourceName);
if (is != null) {
byte[] classBytes;
byte[] buf = new byte[8192];
- ByteArrayOutputStream baos =
+ ByteArrayOutputStream baos =
new ByteArrayOutputStream(buf.length);
int count;
while ((count = is.read(buf, 0, buf.length)) > 0) {
@@ -228,10 +228,10 @@ public class JDTCompiler extends org.apa
baos.flush();
classBytes = baos.toByteArray();
char[] fileName = className.toCharArray();
- ClassFileReader classFileReader =
- new ClassFileReader(classBytes, fileName,
+ ClassFileReader classFileReader =
+ new ClassFileReader(classBytes, fileName,
true);
- return
+ return
new NameEnvironmentAnswer(classFileReader, null);
}
} catch (IOException exc) {
@@ -270,7 +270,7 @@ public class JDTCompiler extends org.apa
}
@Override
- public boolean isPackage(char[][] parentPackageName,
+ public boolean isPackage(char[][] parentPackageName,
char[] packageName) {
StringBuilder result = new StringBuilder();
String sep = "";
@@ -297,7 +297,7 @@ public class JDTCompiler extends org.apa
};
- final IErrorHandlingPolicy policy =
+ final IErrorHandlingPolicy policy =
DefaultErrorHandlingPolicies.proceedWithAllProblems();
final Map<String,String> settings = new HashMap<String,String>();
@@ -325,7 +325,7 @@ public class JDTCompiler extends org.apa
} else if(opt.equals("1.2")) {
settings.put(CompilerOptions.OPTION_Source,
CompilerOptions.VERSION_1_2);
- } else if(opt.equals("1.3")) {
+ } else if(opt.equals("1.3")) {
settings.put(CompilerOptions.OPTION_Source,
CompilerOptions.VERSION_1_3);
} else if(opt.equals("1.4")) {
@@ -343,6 +343,9 @@ public class JDTCompiler extends org.apa
} else if(opt.equals("1.8")) {
settings.put(CompilerOptions.OPTION_Source,
CompilerOptions.VERSION_1_8);
+ } else if(opt.equals("1.9")) {
+ settings.put(CompilerOptions.OPTION_Source,
+ "1.9"); // CompilerOptions.VERSION_1_9
} else {
log.warn("Unknown source VM " + opt + " ignored.");
settings.put(CompilerOptions.OPTION_Source,
@@ -353,7 +356,7 @@ public class JDTCompiler extends org.apa
settings.put(CompilerOptions.OPTION_Source,
CompilerOptions.VERSION_1_6);
}
-
+
// Target JVM
if(ctxt.getOptions().getCompilerTargetVM() != null) {
String opt = ctxt.getOptions().getCompilerTargetVM();
@@ -363,7 +366,7 @@ public class JDTCompiler extends org.apa
} else if(opt.equals("1.2")) {
settings.put(CompilerOptions.OPTION_TargetPlatform,
CompilerOptions.VERSION_1_2);
- } else if(opt.equals("1.3")) {
+ } else if(opt.equals("1.3")) {
settings.put(CompilerOptions.OPTION_TargetPlatform,
CompilerOptions.VERSION_1_3);
} else if(opt.equals("1.4")) {
@@ -389,6 +392,11 @@ public class JDTCompiler extends org.apa
CompilerOptions.VERSION_1_8);
settings.put(CompilerOptions.OPTION_Compliance,
CompilerOptions.VERSION_1_8);
+ } else if(opt.equals("1.9")) {
+ settings.put(CompilerOptions.OPTION_TargetPlatform,
+ "1.9"); // CompilerOptions.VERSION_1_9
+ settings.put(CompilerOptions.OPTION_Compliance,
+ "1.9"); // CompilerOptions.VERSION_1_9
} else {
log.warn("Unknown target VM " + opt + " ignored.");
settings.put(CompilerOptions.OPTION_TargetPlatform,
@@ -402,9 +410,9 @@ public class JDTCompiler extends org.apa
CompilerOptions.VERSION_1_6);
}
- final IProblemFactory problemFactory =
+ final IProblemFactory problemFactory =
new DefaultProblemFactory(Locale.getDefault());
-
+
final ICompilerRequestor requestor = new ICompilerRequestor() {
@Override
public void acceptResult(CompilationResult result) {
@@ -414,11 +422,11 @@ public class JDTCompiler extends org.apa
for (int i = 0; i < problems.length; i++) {
IProblem problem = problems[i];
if (problem.isError()) {
- String name =
+ String name =
new String(problems[i].getOriginatingFileName());
try {
problemList.add(ErrorDispatcher.createJavacError
- (name, pageNodes, new StringBuilder(problem.getMessage()),
+ (name, pageNodes, new StringBuilder(problem.getMessage()),
problem.getSourceLineNumber(), ctxt));
} catch (JasperException e) {
log.error("Error visiting node", e);
@@ -430,10 +438,10 @@ public class JDTCompiler extends org.apa
ClassFile[] classFiles = result.getClassFiles();
for (int i = 0; i < classFiles.length; i++) {
ClassFile classFile = classFiles[i];
- char[][] compoundName =
+ char[][] compoundName =
classFile.getCompoundName();
StringBuilder classFileName = new StringBuilder(outputDir).append('/');
- for (int j = 0;
+ for (int j = 0;
j < compoundName.length; j++) {
if(j > 0) {
classFileName.append('/');
@@ -464,7 +472,7 @@ public class JDTCompiler extends org.apa
}
};
- ICompilationUnit[] compilationUnits =
+ ICompilationUnit[] compilationUnits =
new ICompilationUnit[classNames.length];
for (int i = 0; i < compilationUnits.length; i++) {
String className = classNames[i];
@@ -483,13 +491,13 @@ public class JDTCompiler extends org.apa
File javaFile = new File(ctxt.getServletJavaFileName());
javaFile.delete();
}
-
+
if (!problemList.isEmpty()) {
- JavacErrorDetail[] jeds =
+ JavacErrorDetail[] jeds =
problemList.toArray(new JavacErrorDetail[0]);
errDispatcher.javacError(jeds);
}
-
+
if( log.isDebugEnabled() ) {
long t2=System.currentTimeMillis();
log.debug("Compiled " + ctxt.getServletJavaFileName() + " "
@@ -504,8 +512,8 @@ public class JDTCompiler extends org.apa
if (! options.isSmapSuppressed()) {
SmapUtil.installSmap(smap);
}
-
+
}
-
-
+
+
}
Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1812448&r1=1812447&r2=1812448&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Tue Oct 17 19:45:43 2017
@@ -82,6 +82,17 @@
</fix>
</changelog>
</subsection>
+ <subsection name="Jasper">
+ <changelog>
+ <add>
+ Enable Jasper to compile JSPs for Java 9. In addition to configuring the
+ JSP servlet with for Java 9 via the <code>compilerSourceVM</code> and
+ <code>compilerTargetVM</code>, it is necessary to replace
+ <code>ecj-4.4.2.jar</code> with a more recent version that supports Java
+ 9. (markt)
+ </add>
+ </changelog>
+ </subsection>
<subsection name="WebSocket">
<changelog>
<fix>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org