对于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>())
}
}
}
如果java代码使用Lombok等外部库,那么使用scala编译器构建java类将失败,因为scala编译器不知道注释。
我的解决方案是改变任务依赖关系,在Java之前编译Scala。
tasks.compileJava.dependsOn compileScala
tasks.compileScala.dependsOn.remove("compileJava")
现在任务compileScala
在compileJava
之前运行,就是这样。
如果你的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")
}
我找到了以下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,也不明白这个代码出了什么问题。所以我想知道如何修复这个错误。