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

IntelliJ 可以从 Gradle 导入非标准源目录吗?

岳硕
2023-03-14

我正在转换到使用IntelliJ(2019.1版)。所使用的多项目目录结构对于每个项目都有标准的< code>src/main/java和< code>src/test/java,但另外还有一些非标准的目录结构,例如:< code > src/test support/Java 。

Gradlew(使用IntelliJ中打包的内部/推荐gradlew)用于导入项目。Gradle构建文件包括:

apply plugin: 'idea'
apply plugin: 'java'

编辑以提高清晰度

每个项目都很好。项目间引用适用于标准目录。然而,当我在项目B中,但需要从项目A访问< code>src/generated/java或< code > src/test support/Java 时,这些不会被导入(从gradle命令行编译良好的< code>import语句在IntelliJ中显示为无法解析)。要使这些生效,需要进行配置更改或其他什么吗?

目前,我有:

subprojects {
    idea {
        module {
            testSourceDirs += project.sourceSets.generated.java.srcDirs
            testSourceDirs += project.sourceSets.testsupport.java.srcDirs
        }
    }
}

共有1个答案

阙奇思
2023-03-14

您需要帮助Gradle,为您的项目定义的自定义源创建一个源集。因此,从您的问题中,类似于:

(使用Kotlin DSL)

allprojects {
    apply {
        plugin("idea")
        plugin("java-library")
    }

    repositories {
        mavenCentral()
    }

    configure<SourceSetContainer> {
        create("generated") {
            compileClasspath += project.the<SourceSetContainer>()["main"].output
            runtimeClasspath += project.the<SourceSetContainer>()["main"].output
        }
        create("testsupport") {
            compileClasspath += project.the<SourceSetContainer>()["main"].output
            runtimeClasspath += project.the<SourceSetContainer>()["main"].output
        }
    }

    val api by configurations
    val testImplementation by configurations
    val testRuntimeOnly by configurations

    dependencies {
        api(platform("org.junit:junit-bom:5.5.1"))
        testImplementation("org.junit.jupiter:junit-jupiter-api")
        testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
    }

    val test by tasks.getting(Test::class) {
        useJUnitPlatform()
    }
}

以上将给你:

所以现在您想在Project B中使用Project A,因此Project B的Gradle文件将包含对Project A的依赖:

dependencies {
    implementation(":projectA")
}

这应该有望让你开始。请记住,上面给出的例子使用了Kotlin DSL,您应该能够将其转换回Groovy。

参考文献:

    < Li > https://docs . gradle . org/current/user guide/Java _ plugin . html # source _ sets < Li > https://docs . gradle . org/current/user guide/Java _ testing . html # sec:configuring _ Java _ integration _ tests
 类似资料:
  • 是否有办法将GradleJava项目导入IntelliJ 2017.2. x并应用一些设置,例如 代码样式 vcs设置 从Gradle在项目层面? 我注意到例如Grails框架使用了idea-gradle-plugin,但这只能与Gradle任务结合使用。 我不想使用Gradle任务生成IntelliJ项目文件。每当我导入文件。 这可能吗?

  • 我是Java EE的初学者,我在参考资料中读到Java EE的标准目录结构是这样的: 但当我在intellij idea中创建一个新项目时,目录结构是这样的: 现在我因为一些原因感到困惑。

  • 我有一个在Swagger上具有编译依赖关系的项目,它带来了jackson databind v2.4.5,还有一个在库上具有testCompile依赖关系的项目,该库使用了AWS SDK,它带来了jackson databind v2.6.6。 从gradle运行测试时,一切正常,正确更新的jackson依赖项v2.6.6位于类路径上: intellij依存关系包含两个版本: 然而,当从Intel

  • 问题内容: 我有一个名为“ ClassA”的Python类,另一个应该导入“ A ClassB”的ClassA的Python类。目录结构如下: 我将如何使用,以便ClassB可以使用ClassA? 问题答案: 您确实应该使用软件包。然后将MainDir放置在文件系统中sys.path上的某个点(例如… / site- packages)上,然后可以在ClassB中说: 您只需要在每个目录中放置命名

  • 问题内容: 我有以下内容: 我正在尝试从父目录导入。在这种情况下,我尝试从测试文件夹中运行“ UnitTest1.py”,并从其上方的目录(文件“ ModuleFile.py”)导入。 我知道已经有很多答案。 SO问题1,SO问题2,其他所有SO问题。我只是找不到“使用../”作为相对导入而不是显式路径。 我知道从Python 2.5开始,根据提到使用的文档,它们支持“相对导入”,但是我专门尝试这

  • 我正在用IntelliJ开发一个Gradle项目,有些包IntelliJ无法识别。当我进入项目结构时- 有问题的类是红色的,当鼠标悬停在它们上面时,我收到错误,如“无法解析符号'somepackagename'”或“无法解析符号'SomeClassName'”。 然而,gradle项目从命令行编译就很好。 我尝试了我能找到的所有现有建议,但到目前为止都没有帮助。首先,我已经尝试了: 删除 .ide