我需要使用 IntelliJ Ultimate 运行通过 sbt 构建的 Play2 Java 应用程序。 当使用选项“运行 Play 2 应用程序”时,它可以工作,但它以默认配置运行。
如何在 IntelliJ 中提供自定义 sbt 配置?
我可以在终端中运行,它可以使用此命令
sbt -J-XX:+UnlockExperimentalVMOptions "start -Dconfig.file=/conf/application.conf -Dpidfile.path=/dev/null -Djava.net.preferIPv4Stack=true -Dlogger.file=/conf/logback.xml"
现在,在
application.conf
中有许多自定义配置,但最引人注目的是 Play Web 端口,它是 play.server.http.port=5000
所以我可以直接看到它在开始时就选择了正确的配置。
--- (Running the application, auto-reloading is enabled) ---
[info] p.c.s.NettyServer - Listening for HTTP on /0:0:0:0:0:0:0:0:9000
Server started, use Alt+D to stop
现在在 IntelliJ 中,有一个“Play 2 App”构建 运行/调试配置,但实际上我没有看到任何方法:
sbt run' (I know this because the
sbt start` 处于生产模式,并且应用程序目前需要以这种方式运行我还尝试按照此处的旧答案将 run/debug 作为“应用程序”:https://stackoverflow.com/a/5390609/13903942
我几乎可以工作。我可以提供 stb 选项,但我无法选择以
sbt run
或 sbt start
运行,它似乎总是以 sbt start
运行
最终我需要任何其他运行/调试选项。
我不需要从终端解决方案运行,我知道该怎么做。 支付 Intellij Ultimate 版本的全部目的是能够使用 IDE 运行和运行调试器(否则我将使用其他东西)
有办法吗?
老实说,这可能是我所面临的最糟糕的未记录和扭曲的情况之一,因为我们正在谈论 Java 是众所周知的编程语言,Play 框架基本上处于 Java 框架的顶部位置,而且很好IntelliJ 集成,我对它的糟糕程度以及我为了运行这个而花费的时间感到惊讶。
我有一些时间,我能够验证我在评论中所说的话。
Url To Open
JVM Options
我刚刚使用 play-java-seed 模板和 sbt 命令创建了一个 play java 项目
sbt new playframework/play-java-seed.g8
重构了
HelloController
以在返回 200 Ok 响应之前记录一些消息
import com.typesafe.config.Config;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import play.mvc.*;
import javax.inject.Inject;
public class HomeController extends Controller {
// started the logger
final Logger logger = LoggerFactory.getLogger(this.getClass().getCanonicalName());
final Config config;
// injected the config
@Inject
public HomeController(Config config) {
this.config = config;
}
public Result index() {
// logged some messages using different log levels
logger.debug("A super debug message");
logger.info("An info message");
logger.warn("A warning message");
// logged a message using a value provided in the config file
logger.info("the value of some-key is " + config.getString("some-key"));
return ok(views.html.index.render());
}
}
我在 Intellij 中创建了两个运行配置:
Url To Open
http://localhost:9020
JVM Options
:-Xms512M -Xmx1024M -Xss1M -XX:+CMSClassUnloadingEnabled
将日志级别根设置为
INFO
,并为PROD STDOUT -
文件中的日志消息添加前缀logback.xml
将行
some-key = "A Prod Value"
添加到 application.conf
文件
得到以下输出
/<path to java home>/bin/java
-Dfile.encoding=UTF8
-Djline.terminal=none
-Dsbt.global.base=/private/var/folders/n3/7h5c5s2x1d1f_m_vz22h73280000gn/T/sbt-global-pluginstub
-Dsbt.log.noformat=true
-Xms512M
-Xmx1024M
-Xss1M
-XX:+CMSClassUnloadingEnabled -Didea.managed=true
-classpath "<intellij app path>/IntelliJIdea2023.1/plugins/Scala/launcher/sbt-launch.jar" xsbt.boot.Boot "project root" "run 9020" # new value for the port
#############################################
some init log messages from play
#############################################
# next you can see the prefix added
PROD STDOUT - 2023-08-05 18:23:10 INFO play.api.Play Application started (Dev) (no global state)
PROD STDOUT - 2023-08-05 18:23:11 INFO controllers.HomeController An info message
PROD STDOUT - 2023-08-05 18:23:11 WARN controllers.HomeController A warning message
PROD STDOUT - 2023-08-05 18:23:11 INFO controllers.HomeController the value of some-key is A Prod Value
# above you can see the value of the key from the config file
Url To Open
http://localhost:9010
JVM Options
:设置配置和日志文件的路径,替换了 Xms
、Xmx
和 Xss
-Xmx2048M -Xss2M -XX:+CMSClassUnloadingEnabled -Dconfig.file=conf/dev-application.conf -Dlogger.file=conf/dev-logback.xml
将日志级别根设置为
DEBUG
,并为DEV STDOUT -
文件中的日志消息添加前缀dev-logback.xml
将行
some-key = "A Dev Value"
添加到 dev-application.conf
文件
得到以下输出
/<java home path>/bin/java
-Dfile.encoding=UTF8
-Djline.terminal=none
-Dsbt.global.base=/private/var/folders/n3/7h5c5s2x1d1f_m_vz22h73280000gn/T/sbt-global-pluginstub
-Dsbt.log.noformat=true
-Xms1024M # param edited
-Xmx2048M # param edited
-Xss2M # param edited
-XX:+CMSClassUnloadingEnabled
-Dconfig.file=conf/dev-application.conf # param added
-Dlogger.file=conf/dev-logback.xml # param added
-Didea.managed=true
-classpath "/<intellij path>/IntelliJIdea2023.1/plugins/Scala/launcher/sbt-launch.jar" xsbt.boot.Boot "project root" "run 9010" # here you can see the value of the port I set in `Url To Open`
#############################################
some init log messages from play
#############################################
# next you can see the prefix added for dev and also the log level is set ot DEBUG
DEV STDOUT - 2023-08-05 18:34:18 DEBUG controllers.HomeController A super debug message
DEV STDOUT - 2023-08-05 18:34:18 INFO controllers.HomeController An info message
DEV STDOUT - 2023-08-05 18:34:18 WARN controllers.HomeController A warning message
DEV STDOUT - 2023-08-05 18:34:18 INFO controllers.HomeController the value of some-key is A Dev Value
# above you can see the value of the key from the config file