Несколько сценариев запуска с использованием Gradle

у меня есть рабочая сборка Maven (показано ниже), которая готовит пару исполняемых файлов для запуска как два отдельных процесса.

хотя это работает нормально, как это можно сделать с помощью Gradle? Я вижу, что Gradle предоставляет плагин под названием application, но мне трудно найти хороший пример того, как сказать это при вводе: gradle stage, он должен создать 2 исполняемых файла.

прямо сейчас, когда я звоню stage Он предоставляет только исполняемый файл в" корневом " mainclass, определенном в мой сценарий gradle:

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>

2 ответов


к сожалению, плагин приложения gradle не обеспечивает поддержку первого класса для нескольких исполняемых скриптов.

к счастью, хотя, поскольку скрипты gradle являются заводными, вы можете изменить то, что плагин приложения делает достаточно легко.

на документация для плагина приложения показать, что 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
}

затем включите вывод этой задачи в свой дистрибутив

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

было бы лучше использовать 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 scheduler web