当前位置: 首页 > 知识库问答 >
问题:

使用Gradle在Java之前/之后编译Scala

锺离烈
2023-03-14

共有3个答案

颛孙建业
2023-03-14

对于gradle kotlin dsl,您可以使用这一块

 sourceSets {

    main {
        withConvention(ScalaSourceSet::class) {
            scala {
                setSrcDirs(listOf("src/main/scala", "src/main/java"))
            }
        }
        java {
            setSrcDirs(emptyList<String>())
        }
    }
    test {
        withConvention(ScalaSourceSet::class) {
            scala {
                setSrcDirs(listOf("src/test/scala", "src/test/java"))
            }
        }
        java {
            setSrcDirs(emptyList<String>())
        }
    }
}
公羊瀚
2023-03-14

如果java代码使用Lombok等外部库,那么使用scala编译器构建java类将失败,因为scala编译器不知道注释。

我的解决方案是改变任务依赖关系,在Java之前编译Scala。

tasks.compileJava.dependsOn compileScala
tasks.compileScala.dependsOn.remove("compileJava")

现在任务compileScalacompileJava之前运行,就是这样。

如果你的java代码依赖于scala代码,你需要再做两个步骤,

>

sourceSets {
    main {
        scala {
            outputDir = file("$buildDir/classes/scala/main")
        }
        java {
            outputDir = file("$buildDir/classes/java/main")
        }
    }

将scala输出添加为compileJava的依赖项,

dependencies {
    compile files("$sourceSets.main.scala.outputDir")
}
胡安怡
2023-03-14

我找到了以下sourceSet配置来修复此问题:

sourceSets {
    main {
        scala {
            srcDirs = ['src/main/scala', 'src/main/java']
        }
        java {
            srcDirs = []
        }
}

这是因为scala源代码集可以同时包含java和scala源代码。

 类似资料:
  • Gradle的Groovy插件声称它支持联合编译,允许自由混合和匹配Groovy和Java代码,并在两个方向上都有依赖关系“。 但是,我不认为这适用于测试代码。 我在使用位于中的类。 当尝试使用Gradle构建时,我会遇到如下错误: 请注意,是一个尚未编译的Groovy类(在Gradle输出中,我可以看到它在尝试之前没有运行,因为前者依赖于后者)。 我能够使用groovy-eclipse插件与Ma

  • 使用Gradle5.4.1,我想为一个Android应用程序构建一个CMake项目。这可以在app/build.gradle中通过以下方式完成: 本项目通过使用SWIG生成一个共享库和一些Java文件。我可以通过-djava_output_dir=generated/Java指定Java源的输出目录。 我如何迫使gradle在编译主应用程序源代码(Kotlin)之前等待CMake构建?源代码导入生

  • 我非常精通编码,但偶尔我会遇到似乎做基本相同事情的代码。我在这里的主要问题是,为什么你会使用 .() 而不是 ? 我一直在寻找,似乎找不到两者之间区别的明确定义,以及何时使用它们,何时不使用它们。 一个比另一个有什么好处,为什么我要使用一个而不是另一个??有人能给我解释一下吗?

  • null 这些项目包括: -包含一个用注释的类。 -没有源文件,只有声明方面的依赖项和要编织的项目。 -定义中描述的切入点引用的注释。 -要用中描述的连接点编织的文件。 这里定义了与方面相关的构建文件。其思想是编织与应用程序是独立的,因此应用程序的公共类和主程序都不需要知道编织。相反,主程序只需要从公共包中引用,AJC将负责编织。 主程序类似于: 日志记录方面类似于(参见相关问题中的代码): 似乎

  • AnnotationProcessor刮取并存储项目声明的所有注释数据。这个类应该在项目的其余部分之前编译。至少评论区是这么说的。

  • 我有一个非常简单的构建。gradle文件包含以下内容: 我想要的是在java编译开始之前运行generateSources任务。我找到了几种解决方法,比如compileJava。dependsOn(“generateSources”),但不幸的是,它们给出了一个错误: 我不认识Gradle,也不明白这个代码出了什么问题。所以我想知道如何修复这个错误。