如何在编译时运行JavaExec

时间:2017-07-14 03:26:24

标签: gradle

我在build.gradle中运行gradle javaexec

task main(type: JavaExec) {
  main = 'com.gtan.Application'
  classpath = sourceSets.main.runtimeClasspath
}

这是输出结果:

:compileJava UP-TO-DATE
:compileScala UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:main

我想在没有编译任务的情况下运行这个javaexec。像:

:main

我该怎么办?

1 个答案:

答案 0 :(得分:3)

当您将类路径设置为主sourceSet中的运行时类路径时,您告诉Gradle您的任务取决于主sourceSet的输出。因此,它将首先编译主源集,以确保为您的JavaExec任务正确设置类路径。

您的问题的答案取决于com.gtan.Application类的位置以及应用程序所期望的类路径。如果此类驻留在本地项目中,则在src/main/java下,您将无法摆脱编译,因为Gradle必须编译此类才能执行它。

如果课程位于您的构建所依赖的JAR中,例如:

dependencies {
    runtime 'com.gtan:this-example-has-what-to-run:1.0.0'
}

然后,您可以将任务定义更改为:

task main(type: JavaExec) {
    main = 'com.gtan.Application'
    classpath = configurations.runtime
}

通过将类路径设置为配置,Gradle不需要执行任何编译,您将得到:

$ ./gradlew main
:main