java - Gradle 使用 Gradle 编译和执行具有第三方 jar 依赖项的单个 Java 类 `buildscript`

标签 java gradle gradle-plugin

我跟着这个答案 https://stackoverflow.com/a/19418847/1665592但它并不能帮助我使用 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>
以下是类(class)import我的 Java 文件中使用的语句。
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目标,它将仅编译您在包含中添加的各个类。
这是我的 gradle 和目录结构的屏幕截图。
enter image description here
在这里你会看到我的 src 目录中有两个类,但是编译后我在输出中只有一个类。

关于java - Gradle 使用 Gradle 编译和执行具有第三方 jar 依赖项的单个 Java 类 `buildscript`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63300743/

相关文章:

java - 如何在 play-java 2.5.4 中配置电子邮件功能

Java:打开默认邮件应用程序并创建新邮件并填充收件人和主题字段

Android DataBinding 构建错误

Java docker 文件。构建并测试还是只运行 jar 文件?

java - Eclipse 独立控制台

RISC-V ISA 上的 Java

java - 用于复制任务的 Gradle 排除模块

gradle - 将 Maven 插件迁移到 Gradle : What happens with plugin configurations?

android - 我的项目中有不同的 Gradle 版本? (gradle.xml 与 build.gradle)

android - Android Material和Appcompat Manifest合并失败