2014-01-20 11 views
7

2つの別々のプロセスとして起動する実行可能ファイルのいくつかを準備するMavenビルド(下記参照)があります。Gradleを使用した複数の起動スクリプト

これは問題なく動作しますが、これはどのようにGradleを使用して行うことができますか?私はGradleがapplicationというプラグインを提供しているのを見ていますが、入力時にgradle stageと入力すると、2つの実行ファイルが作成されるはずです。今

私はそれが唯一の私のGradleスクリプトで定義された "ルート" mainclass上で実行可能ファイルを提供していstage呼び出す:

apply plugin: 'java' 
apply plugin: 'application' 

mainClassName = 'SpringLauncher' 
applicationName = 'foo' 
compileJava.options.encoding = 'UTF-8' 
targetCompatibility = '1.7' 
sourceCompatibility = '1.7' 

task stage(dependsOn: ['clean', 'installApp', 'hello']) 

とMavenのビルド:

<build> 
<plugins> 
    <plugin> 
    <groupId>org.codehaus.mojo</groupId> 
     <artifactId>appassembler-maven-plugin</artifactId> 
     <version>1.1.1</version> 
     <configuration> 
     <assembleDirectory>target</assembleDirectory> 
     <programs> 
      <program> 
       <mainClass>foo.bar.scheduler.SchedulerMain</mainClass> 
       <name>scheduler</name> 
      </program> 
      <program> 
       <mainClass>SpringLauncher</mainClass> 
       <name>web</name> 
      </program> 
     </programs> 
     </configuration> 
     <executions> 
      <execution> 
       <phase>package</phase><goals><goal>assemble</goal></goals> 
      </execution>    
     </executions> 
    </plugin> 
</plugins> 

答えて

9

を実行することができます。

しかし、グラデーションスクリプトが面白いので、アプリケーションプラグインが合理的に簡単に何を変更することができます。

documentation for the Application plugin

startScriptsタスクがタイプ CreateStartScriptsであることを示しているので、自分自身と同じタイプ

task schedulerScripts(type: CreateStartScripts) { 
    mainClassName = "foo.bar.scheduler.SchedulerMain" 
    applicationName = "scheduler" 
    outputDir = new File(project.buildDir, 'scripts') 
    classpath = jar.outputs.files + project.configurations.runtime 
} 

の2番目のタスクを作成してみてください、あなたのディストリビューションでは、そのタスクの出力が含ま

applicationDistribution.into("bin") { 
      from(schedulerScripts) 
      fileMode = 0755 
} 
+2

'duplicatesStrategy = 'exclude''をコピータスクに追加すると、' bin/'ディレクトリ内の複製スクリプトが削除されます。 – Whymarrh

2

使用する方が良いかもしれないJavaExec

task scheduler(type: JavaExec) { 
    main = "foo.bar.scheduler.SchedulerMain" 
    classpath = sourceSets.main.runtimeClasspath 
} 

task web(type: JavaExec) { 
    main = "SpringLauncher" 
    classpath = sourceSets.main.runtimeClasspath 
} 

その後、残念ながら、Gradleのアプリケーションのプラグインは、複数の実行可能なスクリプトのためのファーストクラスのサポートを提供していませんgradle scheduler web

+0

しかし、Heokuで使用するスクリプトを手助けすることはできません。 –

関連する問題