Gradle 2.5. Exception thrown by ant.jasper

Hi,

I had a task in my gradle script, which was successfully built by Gradle 2.4:

task compileJsp(dependsOn: classes) << {
        def mergedClasspath = configurations.jasper.asPath + sourceSets.main.runtimeClasspath.asPath
        def jspcDir = new File("$buildDir/compiled-jsp/")
        jspcDir.mkdirs();
        ant.taskdef(classname: 'org.apache.jasper.JspC', name: 'jasper', classpath: mergedClasspath)
        ant.jasper(uriRoot: webAppDir, outputDir: jspcDir, classpath: mergedClasspath)
      }

After Gradle upgrade to version 2.5 I’ve started receiving exception, thrown by the last task line (ant.jasper…):

Execution failed for task 'compileJsp'.
> java.lang.NoSuchMethodError: javax.el.ExpressionFactory.newInstance()Ljavax/el/ExpressionFactory;
* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':web:web-admin:compileJsp'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
        at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
        at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
        at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:52)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
        at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:208)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:186)
        at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:62)
        at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:50)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:25)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:111)
        at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37)
        at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
        at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23)
        at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:68)
        at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
        at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
        at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:55)
        at org.gradle.initialization.DefaultGradleLauncher$6.run(DefaultGradleLauncher.java:174)
        at org.gradle.internal.Factories$1.create(Factories.java:22)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:62)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:47)
        at org.gradle.initialization.DefaultGradleLauncher.runBuildOperation(DefaultGradleLauncher.java:189)
        at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:171)
        at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:35)
        at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:104)
        at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:97)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:62)
        at org.gradle.initialization.DefaultGradleLauncher.runRootBuildOperation(DefaultGradleLauncher.java:184)
        at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:97)
        at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:86)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:93)
        at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
        at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:43)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:27)
        at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:72)
        at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:44)
        at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:50)
        at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:27)
        at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:40)
        at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:170)
        at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:237)
        at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:210)
        at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:35)
        at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24)
        at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:206)
        at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169)
        at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
        at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
        at org.gradle.launcher.Main.doAction(Main.java:33)
        at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:54)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:35)
        at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
Caused by: : java.lang.NoSuchMethodError: javax.el.ExpressionFactory.newInstance()Ljavax/el/ExpressionFactory;
        at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:116)
        at org.gradle.api.internal.project.ant.BasicAntBuilder.nodeCompleted(BasicAntBuilder.java:77)
        at org.gradle.api.internal.project.ant.BasicAntBuilder.doInvokeMethod(BasicAntBuilder.java:92)
        at web_736d0ventt5j7cxhe1pdxtzjg$_run_closure3_closure4_closure10_closure13.doCall(C:\Repos\safeq\web\web.gradle:69)
        at org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:554)
        at org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:535)
        at org.gradle.api.internal.tasks.TaskMutator$1.execute(TaskMutator.java:77)
        at org.gradle.api.internal.tasks.TaskMutator$1.execute(TaskMutator.java:73)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
        ... 58 more
Caused by: java.lang.NoSuchMethodError: javax.el.ExpressionFactory.newInstance()Ljavax/el/ExpressionFactory;
        at org.apache.jasper.compiler.PageInfo.<init>(PageInfo.java:79)
        at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:110)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:373)
        at org.apache.jasper.JspC.processFile(JspC.java:1214)
        at org.apache.jasper.JspC.execute(JspC.java:1362)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
        at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
        ... 67 more

Does anybody know how to fix it?

How are you defining the jasper configuration: is there a 3rd party plugin involved?

Trying printing out configurations.jasper.asPath in both Gradle 2.4 and Gradle 2.5 to see what the difference is.

A reproducible sample would really help us track down what change has caused this exception.

Hello,

My jasper configuration is defined this way:

configurations {
    jasper
}

dependencies {
        jasper "org.apache.tomcat:tomcat-catalina-ant:7.0.55"
        jasper "org.apache.tomcat:tomcat-catalina:7.0.55"
        jasper "org.apache.tomcat:tomcat-jasper:7.0.55"

        jasper 'javax.servlet.jsp.jstl:jstl-api:1.2'
        jasper "org.glassfish.web:jstl-impl:1.2"
        jasper "taglibs:standard:1.1.2"
}

I tried to compare configurations.jasper.asPath for Gradle 2.4 and Gradle 2.5, but they were the same.
I run ‘gradle -v’ command and found out that Gradle 2.5 has older ant version, than Gradle 2.4

------------------------------------------------------------
Gradle 2.4
------------------------------------------------------------

Build time:   2015-05-05 08:09:24 UTC
Build number: none
Revision:     5c9c3bc20ca1c281ac7972643f1e2d190f2c943c

Groovy:       2.3.10
Ant:          Apache Ant(TM) version 1.9.4 compiled on April 29 2014
JVM:          1.8.0_25 (Oracle Corporation 25.25-b02)
OS:           Windows 8.1 6.3 amd64

------------------------------------------------------------
Gradle 2.5
------------------------------------------------------------

Build time:   2015-07-08 07:38:37 UTC
Build number: none
Revision:     093765bccd3ee722ed5310583e5ed140688a8c2b

Groovy:       2.3.10
Ant:          Apache Ant(TM) version 1.9.3 compiled on December 23 2013
JVM:          1.8.0_25 (Oracle Corporation 25.25-b02)
OS:           Windows 8.1 6.3 amd64

I’ve implemented small solution, which can induce this issue, but because I’m not able to add the attachment, I’ll list the code below.
build.gradle

repositories {
	mavenCentral()
    jcenter()
}

configurations {
    jasper
}

dependencies {
	jasper "org.apache.tomcat:tomcat-catalina-ant:7.0.55"
    jasper "org.apache.tomcat:tomcat-catalina:7.0.55"
    jasper "org.apache.tomcat:tomcat-jasper:7.0.55"
    jasper 'javax.servlet.jsp.jstl:jstl-api:1.2'
    jasper "org.glassfish.web:jstl-impl:1.2"
    jasper "taglibs:standard:1.1.2"
}
	  
task compileJsp() << {
	def jspcDir = new File("$buildDir/compiled-jsp/")
    jspcDir.mkdirs();
    ant.taskdef(classname: 'org.apache.jasper.JspC', name: 'jasper', classpath: configurations.jasper.asPath)
    ant.jasper(uriRoot: "./webapp", outputDir: jspcDir, classpath: configurations.jasper.asPath)
}

webapp\web\About.jsp

<%@ page contentType="text/html; charset=UTF-8" %>
<%
	boolean isPopup = true;
	String title = "popup_title16";
%>
<style type="text/css">
	body { background: #F87F0F; color: #FFFFFF; }
	div { text-align: center; width: 450px; }
</style>
<div>
	<img src='${cPath}/img/madeby.png'>
	<br clear='all'><br>
	<b>Copyright (C) 2000-<%= Calendar.getInstance().get(Calendar.YEAR) %> Company name </b><br>
	Helpdesk EMEA: +000 000 000 000<br />
	Helpdesk USA/Canada: +0 (000) 000-0000<br />
	Helpdesk A&P:  +00 00 00 00 00<br />
	email: <a style='color:#FFFFFF' href='mailto:person@company.com'>person@company.com</a>,
	<a target='_new' style='color:#FFFFFF' href='http://www.company.com'>www.company.com</a><br>
	<br>
	<b>by ysoft team</a></b><br>
	<br>
	<i style='color:#DDDDDD'>
		Server is using following technologies:<br>
		Sun Microsystems &copy; Java&trade; 2 Platform Standard Ed. 6.0<br>
		The Apache Software &copy; Jakarta Tomcat 5.5.33.0 <br>
		The Legion Of The Bouncy Castle &copy; Crypto APIs<br>
		Highcharts - Interactive JavaScript charts<br>
		Icons from www.icondrawer.com
	</i>
</div>

webapp\WEB-INF\web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
        version="3.0">

    <display-name>Company Administration</display-name>
    <description>by Company name</description>

    <context-param>
        <description>-=webmaster=-</description>
        <param-name>webmaster</param-name>
        <param-value>info@company.com</param-value>
    </context-param>

    <!-- eob: servlet mappings -->
    <session-config>
        <session-timeout>30</session-timeout>
        <!--  30 minutes -->
    </session-config>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>warn.html</welcome-file>
    </welcome-file-list>

    <error-page>
        <error-code>404</error-code>
        <location>/web/Error404.jsp</location>
    </error-page>

    <error-page>
        <exception-type>java.lang.Throwable</exception-type>
        <location>/error.jsp</location>
    </error-page>
</web-app>

Please ensure that file About_jsp.java doesn’t exist in build folder, before running ‘gradle compileJsp’ command with Gradle 2.5 (Gradle 2.4 will build this project successfully).

Thanks for the reproducible example. This is caused by a change to the classpath ordering in Gradle 2.5: see GRADLE-3331.

Please try out the newly released Gradle 2.6, where this issue has been addressed.

Hello,

Thank you for the reply. project was successfully built using Gradle 2.6.