Question

i want to do some black box tests on a web application. Therefore i want to do the following: 1) unzip the tomcat to build directory 2) unzip the web app to build directory 3) start tomcat installation from step 1 4) do the tests 5) stop tomcat

My first steps towards this...

cargo {
    containerId = 'tomcat6x'
    port = 17388
    local {
        homeDir = file("$buildDir/install/apache-tomcat-6.0.30")
    }
}

task unpackTomcat << {
    file("$buildDir/install").mkdirs()
    ant.unzip(src: configurations.tomcat.files.iterator().next(), dest: "$buildDir/install")
}

task largeTests << {
    doFirst {
        unpackTomcat
    } 
    doLast {
        cargoStartLocal
    }
}
...

leads to the following error when executing the largeTests task:

Build aborted because of an unexpected internal error. Please file an issue at: http://www.gradle.org.

* Try:
Run with --debug option to get additional debug info.

* Exception is:
java.util.ConcurrentModificationException
    at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
    at java.util.AbstractList$Itr.next(AbstractList.java:343)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:59)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:48)
    at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:34)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:55)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:57)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:41)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:51)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:42)
    at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:243)
    at org.gradle.execution.DefaultTaskGraphExecuter.executeTask(DefaultTaskGraphExecuter.java:192)
    at org.gradle.execution.DefaultTaskGraphExecuter.doExecute(DefaultTaskGraphExecuter.java:177)
    at org.gradle.execution.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:83)
    at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:36)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:70)
    at org.gradle.execution.DefaultBuildExecuter.access$300(DefaultBuildExecuter.java:23)
    at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:80)
    at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:70)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:63)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:157)
    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:112)
    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:80)
    at org.gradle.launcher.cli.RunBuildAction.execute(RunBuildAction.java:42)
    at org.gradle.launcher.cli.RunBuildAction.execute(RunBuildAction.java:28)
    at org.gradle.launcher.exec.ExceptionReportingAction.execute(ExceptionReportingAction.java:32)
    at org.gradle.launcher.exec.ExceptionReportingAction.execute(ExceptionReportingAction.java:21)
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLoggingAction.execute(CommandLineActionFactory.java:233)
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLoggingAction.execute(CommandLineActionFactory.java:217)
    at org.gradle.launcher.Main.doAction(Main.java:48)
    at org.gradle.launcher.exec.EntryPoint$1.execute(EntryPoint.java:53)
    at org.gradle.launcher.exec.EntryPoint$1.execute(EntryPoint.java:51)
    at org.gradle.launcher.exec.Execution.execute(Execution.java:28)
    at org.gradle.launcher.exec.EntryPoint.run(EntryPoint.java:39)
    at org.gradle.launcher.Main.main(Main.java:39)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.gradle.launcher.ProcessBootstrap.runNoExit(ProcessBootstrap.java:51)
    at org.gradle.launcher.ProcessBootstrap.run(ProcessBootstrap.java:33)
    at org.gradle.launcher.GradleMain.main(GradleMain.java:24)


BUILD FAILED
Was it helpful?

Solution

<< is shorthand for doLast. Therefore largeTests adds two task actions from another action, which is too late (actions have to be added at configuration time). Unfortunately, the error message isn't very good. :-) If you remove the << after largeTests, the error while go away.

Another improvement is to use a Copy task for unpackTomcat:

task unpackTomcat(type: Copy) {
    from zipTree(configurations.tomcat.singleFile)
    into "$buildDir/install" 
}

OTHER TIPS

Peter is correct, though you probably want to set the correct permissions on the shell scripts after unpacking too - and if you want Gradle to recognize when it's already performed that task and skip over it, you should consider setting your inputs / outputs as well.

Here's a snippet I'm using to decompress / copy over a freshly downloaded copy of tomcat and set it up.

 /**
  * Expand the downloaded archive if it hasn't already been expanded
  */
 task explodeTomcatServer(dependsOn: downloadTomcat) {
     inputs.file file(tomcatZipFileLocation); 
     outputs.dir file(tomcatBaseName); 
     doLast {
         copy {
             from zipTree(tomcatZipFileLocation);
             into project.projectDir;
             include tomcatBaseName + '/bin/**';
             include tomcatBaseName + '/conf/**';
             include tomcatBaseName + '/lib/**';
             include tomcatBaseName + '/webapps/**';
             include tomcatBaseName + '/work/**';
         }
         // make sure that the shell scripts are set +x on linux / macs
         if (System.getProperty("os.name").toLowerCase().indexOf("win") < 0) {
             FileTree tree = fileTree(tomcatBaseName + '/bin').include('**/*.sh');
             tree.each { File file ->
                 logger.info('Setting +x permission on ' + file);
                 file.setExecutable(true);
             }
         }
     }
 }
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top