java - 如果配置中的类在同一个包中,为什么我必须在新配置中包含 main 的输出?
问题描述
让我们假设一个具有如下项目结构的 java 项目:
src
itest
java
SourcesTestsItest.java
main
java
gradle_pr
pojo.java
test
java
gradle_pr
SourceSetsTest.java
构建.gradle
/*
* This file was generated by the Gradle 'init' task.
*
* This generated file contains a sample Java Library project to get you started.
* For more details take a look at the Java Libraries chapter in the Gradle
* User Manual available at https://docs.gradle.org/6.3/userguide/java_library_plugin.html
*/
plugins {
// Apply the java-library plugin to add support for Java Library
id 'java-library'
}
repositories {
// Use jcenter for resolving dependencies.
// You can declare any Maven/Ivy/file repository here.
jcenter()
}
sourceSets{
itest{
compileClasspath += sourceSets.main.output
runtimeClasspath += sourceSets.main.output
java{
srcDirs("src/itest")
}
}
}
configurations{
itestImplementation.extendsFrom(testImplementation)
itestRuntimeOnly.extendsFrom(testRruntimeOnly)
}
dependencies {
// This dependency is exported to consumers, that is to say found on their compile classpath.
api 'org.apache.commons:commons-math3:3.6.1'
// This dependency is used internally, and not exposed to consumers on their own compile classpath.
implementation 'com.google.guava:guava:28.2-jre'
// Use JUnit test framework
testImplementation 'junit:junit:4.12'
implementation('org.apache.httpcomponents:httpclient:4.5.12')
itestImplementation('com.google.guava:guava:29.0-jre')
}
task printSourceSetInformation(){
doLast{
sourceSets.each { srcSet ->
println "["+srcSet.name+"]"
print "-->Source directories: "+srcSet.allJava.srcDirs+"\n"
print "-->Output directories: "+srcSet.output.classesDirs.files+"\n"
print "-->Compile classpath:\n"
srcSet.compileClasspath.files.each {
print " "+it.path+"\n"
}
println ""
}
}
}
task itest(type: Test) {
description = "Run integration tests"
group = "verification"
testClassesDirs = sourceSets.itest.output.classesDirs
classpath = sourceSets.itest.runtimeClasspath
}
为什么我使用以下几行
compileClasspath += sourceSets.main.output
runtimeClasspath += sourceSets.main.output
如果 pojo 类应该在 itest 下的测试类中可见,因为它们在同一个包中?默认配置如何工作,以便测试用例可以看到生成的 main 编译代码?
解决方案
Gradle 本身并不知道您的配置如何相互依赖(即,可能是main
配置依赖itest
或相反)。
对于main
和test
配置,当您应用java-library
插件时,会为您建立此依赖关系。
推荐阅读
- javascript - quilljs copyCode 模块 - 无法在“节点”上执行“insertBefore”
- javascript - 用 2 列迭代一行
- json - 如何在 Python 中将 JSON 的文本文件转换为 JSON 数组?
- python - 在表上的简单计算。请帮助我使我的代码更有效
- scheme - 如何设计一个从给定列表中的每个数字中减去 2 的函数?
- kotlin - Kotlin,内在数据类型的未解决参考
- angular - 从 BehaviorSubject 中检索多个动态创建的组件的值
- xcode - 如何在 xcode 12.2 中退出“历史编辑器”模式?
- vue.js - 在同一个 div vue.js 中显示 2 个元素
- c - 为什么我在 C 中得到这个双重释放或损坏的回溯错误?