这是一个建议使用Play框架的Gradle构建here。
plugins {
id 'play'
id 'idea'
}
repositories {
jcenter()
maven {
name "typesafe-maven-release"
url "https://repo.typesafe.com/typesafe/maven-releases"
}
ivy {
name "typesafe-ivy-release"
url "https://repo.typesafe.com/typesafe/ivy-releases"
layout "ivy"
}
}
在从命令行构建,启动等时它工作正常但是一旦项目在intellij中导入(想法的项目文件由gradle idea
生成),依赖项(来自播放插件)就不会显示在项目视图/外部库中(即使在gradle面板中点击“刷新所有gradle项目”之后)。
谢谢:)
PS :intellij 15.0.2 / gradle 2.6 / play plugin
答案 0 :(得分:5)
回答here。显然,gradle idea插件需要明确告知如何连接依赖项。
总结一下:
gradle idea
以生成构思的项目文件在intellij中打开项目
plugins {
id 'play'
id 'idea'
}
repositories {
jcenter()
maven {
name "typesafe-maven-release"
url "https://repo.typesafe.com/typesafe/maven-releases"
}
ivy {
name "typesafe-ivy-release"
url "https://repo.typesafe.com/typesafe/ivy-releases"
layout "ivy"
}
}
idea {
module {
sourceDirs += file("app")
testSourceDirs += file("test")
scopes.COMPILE = [plus: [configurations.play], minus: []]
scopes.RUNTIME = [plus: [configurations.playRun], minus:[configurations.play]]
scopes.TEST = [plus: [configurations.playTest], minus: [configurations.playRun]]
}
}
PS:使用intellij 15.0.2 / gradle 2.10 / gradle play plugin测试
答案 1 :(得分:4)
我使用的是Intellij(2017年和2018年),Gradle(4.6)和Play(2.5)。其中三个不会开箱即用。
在没有帮助的情况下,IDEA不会识别依赖关系,并且只会记事本 - 没有代码完成,没有导航。这是因为IDEA查看了Java插件的配置模型,但是' play'插件使用" new"软件模型。我不认为任何一方都会改变这种状态以便很快与其他人相遇。
这个想法'插件写入基于文件的项目文件,这些文件不能很好地工作,必须手动刷新。我建议你不要使用这个想法'插件。
使用' java'并且'玩'插件,你可以帮助IDEA了解你想要的东西:
(1) 移动您的Play源文件,以遵循' java'插件:
您可以创建从./test到src / test / java的符号链接,或者使用带有插件代码的播放模型进行muck。路径./test在' play'中被硬编码(!)。插件,但我发现IDEA在src / test / java中找到它会更好。
(2) 配置播放插件以从Java插件源目录获取其输入。像这样:
model {
components {
play {
sources {
java {
source.setSrcDirs files("src/main/java")
}
resources {
source.setSrcDirs files("src/main/resources")
}
routes {
// leave in ./conf
}
}
}
}
}
(3) 配置java插件将其输出放在播放插件输出目录中。像这样:
sourceSets {
main {
java.outputDir = file('build/playBinary/classes')
}
test {
java.outputDir = file('build/playBinary/testClasses')
}
}
(4) 给IDEA更多的帮助来解决这个问题:
configurations {
compile.extendsFrom(play)
testCompile.extendsFrom(playTest)
implementation.extendsFrom(playRun)
implementation.extendsFrom(playPlatform)
}
如果这样做,您可以直接将Gradle项目导入IDEA,使用Gradle runner进行测试,并随时刷新gradle项目。
我意识到这个答案已经很晚了,但是没有太多的信息,这个答案可能会帮助人们在遥远的未来继续寻找这个。
+ - + - + - + - + - + - + - + -
编辑:我已经停止使用上述方法,因为它太不可靠了。相反,我编写了自己的插件来复制旋转并路由sbt的编译步骤,然后只使用传统的scala(使用java)gradle插件,还使用groovy(用于spock测试)。我使用应用程序插件来构建发行版。我将其导入为Intellij中的gradle构建,并且所有内容都可以正常运行"。我建议不要使用' play'插件。
使用直接的gradle插件。避免这个想法'并且'玩'插件。将项目作为gradle构建导入Intellij - 即使是传统的JUnit运行器也能正常工作。远离"新"插件中的gradle软件模型。直接从Intellij运行和调试,就像任何其他Java应用程序一样。
这意味着放弃"开发模式" sbt,并且始终运行" ProdServerStart" main(但你仍然可以在dev或test"模式" Play中运行)。但我并不缺少sbt。 :^)例如,在运行ProdServerStart时,总是会耗尽带有传统类路径的jar。您需要从" changeme"中更改应用程序密钥,您必须将资产jar放在类路径上。这是所有直接的JVM,没有任何秘密调料(其他旋转和路线编译器)。
我现在回过头来了解更多详情:
@TaskAction
public void generate() {
getSource().forEach(sourceFile -> {
TwirlCompiler.compile(sourceFile,
getAppDir(),
getDestinationDir(),
FORMATTER,
ADDITIONAL_IMPORTS,
Codec.UTF8(),
false,
false);
});
}
和
@TaskAction
public void generate() {
getSource().forEach(sourceFile -> {
RoutesCompiler.RoutesCompilerTask routesCompilerTask = new RoutesCompiler.RoutesCompilerTask(sourceFile,
ADDITIONAL_IMPORTS,
true,
true,
false);
RoutesCompiler.compile(routesCompilerTask, INJECTED_ROUTES_GENERATOR, getDestinationDir());
});
}
应该可以帮到你。
答案 2 :(得分:1)
首先,您必须根据gradle play插件更改项目。 here是链接,如何将sbt项目更改为gradle并确保您可以从命令提示符或终端执行所有必需的命令(build,clean,runPlayBinary等)。如果能够成功构建,则可以导入Intellj IDE。这是您必须遵循的步骤。在 build.gradle 文件中添加想法插件并按照配置进行想法源配置。
plugins {
....
id 'idea'
}
..
idea {
module {
sourceDirs += file("app")
testSourceDirs += file("test")
scopes.COMPILE = [plus: [configurations.play], minus: []]
scopes.RUNTIME = [plus: [configurations.playRun], minus:[configurations.play]]
scopes.TEST = [plus: [configurations.playTest], minus: [configurations.playRun]]
}
}
...
要运行(运行配置)
转到智能偏好设置
通过IntelliJ IDEA 2018.3.2(Ultimate Edition)snd Play 2.5.2级4.10.2测试