使用Gradle的多个启动脚本

Jes*_*gui 8 gradle maven

我有一个有效的Maven构建(如下所示),它准备了几个可执行文件作为两个独立的进程启动.

虽然这很好用,但如何使用Gradle完成?我看到Gradle提供了一个名为的插件application,但我很难找到一个很好的例子来告诉它在输入时:gradle stage它应该创建2个可执行文件.

现在当我调用stage它时,它只在我的gradle脚本中定义的"root"主类上提供了一个可执行文件:

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'])
Run Code Online (Sandbox Code Playgroud)

和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>
Run Code Online (Sandbox Code Playgroud)

Per*_*ler 11

遗憾的是,gradle应用程序插件不提供对多个可执行脚本的一流支持.

幸运的是,因为gradle脚本是常规的,所以你可以很容易地改变应用程序插件的功能.

Application插件文档显示该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
}
Run Code Online (Sandbox Code Playgroud)

然后在您的发行版中包含该任务的输出

applicationDistribution.into("bin") {
            from(schedulerScripts)
            fileMode = 0755
}
Run Code Online (Sandbox Code Playgroud)

  • 将`duplicatesStrategy ='exclude'添加到复制任务将消除`bin /`目录中的重复脚本. (2认同)