Java Play - 如何使用自定义 sbt 配置选项在 IntelliJ 中运行 Play

问题描述 投票:0回答:1

问题

我需要使用 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”构建 运行/调试配置,但实际上我没有看到任何方法:

  1. 提供 sbt 参数
  2. 使用命令“start”运行 sbt,但它始终运行,因为
    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 集成,我对它的糟糕程度以及我为了运行这个而花费的时间感到惊讶。

java intellij-idea build playframework sbt
1个回答
0
投票

我有一些时间,我能够验证我在评论中所说的话。

  • 端口可以设置更改
    Url To Open
  • 的值
  • 可以设置 JVM 的参数,更改
    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
© www.soinside.com 2019 - 2024. All rights reserved.