Scala 建立IntelliJ 2017,与Gradle 4.2和最新的Play Framework 2.6合作

Scala 建立IntelliJ 2017,与Gradle 4.2和最新的Play Framework 2.6合作,scala,intellij-idea,gradle,playframework,playframework-2.6,Scala,Intellij Idea,Gradle,Playframework,Playframework 2.6,我正在尝试使用Gradle 4.2.1设置IntelliJ 2017.2以与我的Play 2.6应用程序配合使用 我还安装了用于IntelliJ的Scala插件 经过数小时对各种博客和指南的筛选,我创建了一个build.gradle文件,该文件如下所示: plugins { id 'play' id 'idea' } model { components { play { platform play: '2.6.6', scala

我正在尝试使用Gradle 4.2.1设置IntelliJ 2017.2以与我的Play 2.6应用程序配合使用

我还安装了用于IntelliJ的Scala插件

经过数小时对各种博客和指南的筛选,我创建了一个build.gradle文件,该文件如下所示:

plugins {
    id 'play'
    id 'idea'
}

model {
    components {
        play {
            platform play: '2.6.6', scala: '2.11'
            injectedRoutesGenerator = true
        } 
    }
}

idea {
    module {
        sourceDirs += project.file('app')
        testSourceDirs += project.file('test')

        project.file("${project.buildDir}/src/play/binary").listFiles().each {
            if (it.name.endsWith('ScalaSources')) {
                sourceDirs += it
                generatedSourceDirs += it
            }
        }

        outputDir = project.file("${project.buildDir}/playBinary/classes")
        testOutputDir = project.file("${project.buildDir}/playBinary/testClasses")

        scopes.COMPILE = [plus: [configurations.play], minus: []]
        scopes.RUNTIME = [plus: [configurations.playRun], minus:[configurations.play]]
        scopes.TEST = [plus: [configurations.playTest], minus: [configurations.playRun]]

        sourceDirs += project.file('conf')
        testSourceDirs += project.file('test/resources')
    }
}

dependencies {
    // dependencies...
}
我面临的主要问题是IntelliJ无法正确找到我的所有源代码

如果我尝试在项目设置中手动添加内容(例如“app”目录),我的更改将通过渐变刷新重置

我也尝试过使用Gradle配置,比如“为每个源代码集创建单独的模块”,但并没有太大帮助


我知道这不是一个典型的设置,因为大多数人都使用SBT进行播放,但不幸的是,由于Gradle是工作中的标准,我们暂时无法使用它。有没有人对IntelliJ 2017、Gradle 4.2和Play 2.6的设置有任何运气

我发现Intellij 2017并不真正支持Gradle play插件。我正在运行IDEA 2017 3.5和Gradle 4.6,从build.Gradle中简单导入Gradle项目是行不通的。在处理源文件时,IDEA只不过是一个记事本

我认为正在发生的是,这个想法是硬编码的,专门寻找Java插件的配置和源代码集。您的scopes配置可能会做同样的事情,但首先,我添加了两种配置:

// IDEA will not use the dependencies unless it finds these particular configurations.

configurations.create(JavaPlugin.COMPILE_CLASSPATH_CONFIGURATION_NAME, configuration -> {
    configuration.extendsFrom(configurations.findByName(PlayPluginConfigurations.COMPILE_CONFIGURATION));
    configuration.setTransitive(true);
});

configurations.create(JavaPlugin.TEST_COMPILE_CLASSPATH_CONFIGURATION_NAME, configuration -> {
    configuration.extendsFrom(configurations.findByName(PlayPluginConfigurations.TEST_COMPILE_CONFIGURATION));
    configuration.setTransitive(true);
});
这允许IDEA识别渐变依赖项,但它们不会出现在IDE中,除非它们与IDEA项目结构的模块源相关联,所以我添加了两个源集——它们的唯一目的是触发IDEA识别依赖项,而不是让IDEA在构建任何东西时使用它们。(我应用“java base”插件,并使用JavaPluginConvention对象的源集。)


我仍然缺少一些细节。如果有人可以添加详细信息,我很乐意与大家分享我的插件,上面的插件来自于此。我没有使用“idea”插件——我只是单独应用“play”插件,应用上面的修复,并将该项目作为Gradle项目导入。gradle任务在IDE中运行良好,依赖项正确显示,并且IDE的所有优点都恢复了活力。我发现Intellij 2017并不真正支持gradle play插件。我正在运行IDEA 2017 3.5和Gradle 4.6,从build.Gradle中简单导入Gradle项目是行不通的。在处理源文件时,IDEA只不过是一个记事本

我认为正在发生的是,这个想法是硬编码的,专门寻找Java插件的配置和源代码集。您的scopes配置可能会做同样的事情,但首先,我添加了两种配置:

// IDEA will not use the dependencies unless it finds these particular configurations.

configurations.create(JavaPlugin.COMPILE_CLASSPATH_CONFIGURATION_NAME, configuration -> {
    configuration.extendsFrom(configurations.findByName(PlayPluginConfigurations.COMPILE_CONFIGURATION));
    configuration.setTransitive(true);
});

configurations.create(JavaPlugin.TEST_COMPILE_CLASSPATH_CONFIGURATION_NAME, configuration -> {
    configuration.extendsFrom(configurations.findByName(PlayPluginConfigurations.TEST_COMPILE_CONFIGURATION));
    configuration.setTransitive(true);
});
这允许IDEA识别渐变依赖项,但它们不会出现在IDE中,除非它们与IDEA项目结构的模块源相关联,所以我添加了两个源集——它们的唯一目的是触发IDEA识别依赖项,而不是让IDEA在构建任何东西时使用它们。(我应用“java base”插件,并使用JavaPluginConvention对象的源集。)

我仍然缺少一些细节。如果有人可以添加详细信息,我很乐意与大家分享我的插件,上面的插件来自于此。我没有使用“idea”插件——我只是单独应用“play”插件,应用上面的修复,并将该项目作为Gradle项目导入。gradle任务在IDE中工作得很好,依赖项正确地显示了IDE的所有优点,只要通过单击内容来导航源代码,这些优点就会重现