tomcat.tar.gzを解凍し、貨物コンテナ内のtomcatを開始する

私は、Webアプリケーション上でいくつかのブラックボックステストをしたい。 したがって、私は次のことをしたい: 1)tomcatを解凍してディレクトリを構築する 2)Webアプリケーションを解凍してディレクトリを構築する 3)ステップ1のtomcatのインストールを開始する 4)テストを行う 5)ストップ・トムキャット

これに向けた私の最初のステップ...

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
    }
}
...

largeTestsタスクの実行時に次のエラーが発生します。

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
0

2 答え

<< 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.

もう一つの改善点は、 unpackTomcat Copy タスクを使用することです。

task unpackTomcat(type: Copy) {
    from zipTree(configurations.tomcat.singleFile)
    into "$buildDir/install" 
}
1
追加された
ちょうどあなたが別のタスクからタスクを呼び出そうとしていることに気づいた。それはサポートされていません。代わりに、 dependsOn でタスクを配線する必要があります。
追加された 著者 Peter Niederwieser,

Peterも正しいですが、アンパック後にシェルスクリプトに正しいパーミッションを設定したいと思うかもしれませんが、Gradleにそのタスクがすでに実行されていることを認識させてスキップさせたい場合は、入力/出力の設定も考慮する必要があります。

ここでは、Tomcatの新しくダウンロードしたコピーを解凍/コピーしてセットアップするためのスニペットを示します。

 /**
  * 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);
             }
         }
     }
 }
0
追加された
あなたはcopyのfileMode属性とdirMode属性を使用してパーミッションを設定すると便利です。関連ファイルのアクセス権のみを変更できるように、2つの「from」節が必要なことがあります。つまり、MrJohnBBQの答えのループを好むかもしれません。 fileModeを使用する場合は、8進数を使用することを忘れないでください! fileMode 0775
追加された 著者 Jules,