Gradle 使用 Gradle `buildscript` 编译并执行带有第三方 jar 依赖项的单个 Java Class
Gradle Compile & Execute the Single Java Class with third-party jar dependencies using Gradle `buildscript`
我遵循了这个答案 ,但它对我使用 Gradle 编译单个 java 文件没有帮助。它说 Task :compileMessageKeys NO-SOURCE
为什么?
我只有一个 Java 文件 CreateMessageKeysTask.java
依赖于 "apache-ant-1.7.0/ant.jar"
jar
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 文件中使用的 class 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
}
所以我尝试创建一个单独的源集,而不是配置编译。我就是这样做的。
sourceSets {
single{
java {
srcDir 'src/main/java'
include '**/Class1.java'
}
}
}
task compileSingle(type: JavaCompile) {
source = sourceSets.single.java
classpath = sourceSets.main.compileClasspath
destinationDirectory = sourceSets.main.output.classesDirs[0]
}
现在,当我调用 compileSingle
目标时,它将只编译您在包含中添加的相应 classes。
这是我的 gradle 和目录结构的屏幕截图。
在这里你会看到我的 src 目录中有两个 classes,但是 post compile 我在输出中只有一个 class.
用buildscript
编译和执行Gradle
中的java代码非常简单
buildscript {
dependencies {
classpath files('lib/apache-ant-1.7.0/ant.jar')
}
}
task CreateMessageKeys {
def obj = new mypackage.build.CreateMessageKeysTask();
obj.execute();
}
我遵循了这个答案 ,但它对我使用 Gradle 编译单个 java 文件没有帮助。它说 Task :compileMessageKeys NO-SOURCE
为什么?
我只有一个 Java 文件 CreateMessageKeysTask.java
依赖于 "apache-ant-1.7.0/ant.jar"
jar
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 文件中使用的 class 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
}
所以我尝试创建一个单独的源集,而不是配置编译。我就是这样做的。
sourceSets {
single{
java {
srcDir 'src/main/java'
include '**/Class1.java'
}
}
}
task compileSingle(type: JavaCompile) {
source = sourceSets.single.java
classpath = sourceSets.main.compileClasspath
destinationDirectory = sourceSets.main.output.classesDirs[0]
}
现在,当我调用 compileSingle
目标时,它将只编译您在包含中添加的相应 classes。
这是我的 gradle 和目录结构的屏幕截图。
用buildscript
Gradle
中的java代码非常简单
buildscript {
dependencies {
classpath files('lib/apache-ant-1.7.0/ant.jar')
}
}
task CreateMessageKeys {
def obj = new mypackage.build.CreateMessageKeysTask();
obj.execute();
}