【发布时间】:2020-08-17 13:59:52
【问题描述】:
我遵循了这个答案https://stackoverflow.com/a/19418847/1665592,但它并不能帮助我使用 Gradle 编译单个 java 文件。上面写着Task :compileMessageKeys NO-SOURCE 为什么?
我只有一个依赖于"apache-ant-1.7.0/ant.jar" jar 的Java 文件CreateMessageKeysTask.java
task compileMessageKeys (type: JavaCompile) {
doFirst {
println "$projectDir/precompile"
new File("$projectDir/precompile").mkdirs()
}
source = sourceSets.main.java.srcDirs
include 'mypackage.build.CreateMessageKeysTask.java'
classpath = sourceSets.main.compileClasspath
destinationDir = sourceSets.main.output.classesDir
}
compileMessageKeys.options.compilerArgs = ["-sourcepath", "builder/precompile-task/src/mypackage/build"]
我的ant 脚本如下
<target name="precompile"
description="builds the CreateMessageKeysTask to generates the MessageKeys interface">
<mkdir dir="${precompile}" />
<echo message=" precompile.src: ${precompile.src}" />
<javac srcdir="${precompile.src}" destdir="${precompile}"
includes="mypackage/build/**"
debug="true" fork="true" memoryMaximumSize="${javacCoreMaxMem}"
includeantruntime="false">
<classpath>
<fileset dir="${my.proj.base}/lib/">
<include name="apache-ant-1.7.0/ant.jar" />
</fileset>
</classpath>
</javac>
</target>
以下是我的 Java 文件中使用的 import 类语句。
import org.apache.tools.ant.*
import java.io.*;
import java.util.*;
编辑
我也在下面尝试了一些方法,但它仍然没有帮助我
task compileMessageKeys (type: JavaCompile) {
doFirst {
println "$projectDir/precompile"
new File("$projectDir/precompile").mkdirs()
}
dependencies{
compile fileTree(dir: 'lib/', include: ['apache-ant-1.7.0/ant.jar'])
}
source = sourceSets.main.java.srcDirs
include 'mypackage.build.CreateMessageKeysTask.java'
classpath = sourceSets.main.compileClasspath
destinationDir = sourceSets.main.output.classesDir
}
【问题讨论】:
-
一方面,
include采用 Ant 样式文件模式,但您使用的东西看起来像 Java 包引用。但是,总的来说,我建议您创建一个 Gradle 任务(可能在 buildSrc 中)来管理它。 -
同意..;但我的
ant task依赖于一些ant implementationstackoverflow.com/q/63339476/1665592.. 我现在正在寻找它 -
我可以用
task runWithJavaExec(type: JavaExec) { }的东西编译Java文件然后执行吗?
标签: java gradle gradle-plugin