IntelliJ IDEA命令行运行配置的版本

3
我有一个使用Spring Boot的IntelliJ IDEA运行配置。
我希望能够从MacOS命令行执行同样的运行。请问如何让IntelliJ IDEA显示出我需要执行运行配置的命令(或命令)。
这是`gradle`的`build.gradle`文件:
plugins {
    id 'org.springframework.boot' version '2.6.4'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}

group = 'org.mountsinai'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = "15"

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2'
    runtimeOnly 'com.microsoft.sqlserver:mssql-jdbc'
    implementation group: 'org.springframework', name: 'spring-aspects', version: '5.3.15'
    implementation group: 'nz.net.ultraq.thymeleaf', name: 'thymeleaf-layout-dialect', version: '3.0.0'
    implementation group: 'com.jayway.jsonpath', name: 'json-path', version: '2.7.0'
    implementation group: 'com.github.pcj', name: 'google-options', version: '1.0.0'
    implementation 'com.google.code.gson:gson:2.9.0'
}

tasks.named('test') {
    useJUnitPlatform()
    minHeapSize = "1024m" // initial heap size
    maxHeapSize = "2048m" // maximum heap size
}
targetCompatibility = JavaVersion.VERSION_15

这是我想要在命令行上自动化运行的内容,在 ./.idea/workspace.xml 中的 configuration 元素:

    <configuration name="IrwMetadataIntegrationApplication" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
      <module name="org.mountsinai.IRWMetadataIntegration.main" />
      <option name="SPRING_BOOT_MAIN_CLASS" value="org.mountsinai.IRWMetadataIntegration.IrwMetadataIntegrationApplication" />
      <option name="PROGRAM_PARAMETERS" value="--algorithm=batch --numOfStudiesToRetrieve=600" />
      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
      <option name="ALTERNATIVE_JRE_PATH" value="15" />
      <method v="2">
        <option name="Make" enabled="true" />
      </method>
    </configuration>

我的原始问题现在可以更具体地提出:如何将IDEA配置和workspace.xml文件转换为可在IntelliJ IDEA之外执行的命令(或脚本)?请注意保留HTML标签,以下是需要翻译的内容:

使用

IntelliJ IDEA 2021.3.2 (Ultimate Edition) Build #IU-213.6777.52, built on January 27, 2022

感谢,Arthur。

没有任何集成开发环境可以独立地构建或执行源代码。它们使用一些构建工具,例如 mavengradle 等等,结合 compilerinterpreter 等等。你在问题中没有指定这些内容,而你的答案就在其中。 - Rohit Babu
你可能正在使用mvn或mvnw,如果是这样,在Mac终端中执行mvnw clean spring-boot:run命令将运行你的Spring Boot代码。 - Ashish Patil
@RohitBabu,你说得有道理。我已经在我的问题中添加了gradle信息。 - Arthur
你的运行配置更像是gradle命令的GUI版本。据我所知,你必须运行相应的gradle命令才能完成运行配置的工作。你可以在任何编辑器(比如记事本)中检查你的运行配置文件以了解更多信息。 - Rohit Babu
感谢你的提示@RohitBabu。我在./.idea/workspace.xml中找到了运行配置文件。它是一个相当大(337行)且复杂的文件。我将把我关心的运行配置放在上面的问题中。 - Arthur
4个回答

10

在你的控制台顶部,注意到有一个命令类似于 Java,通常会折叠成短格式,但如果你点击它:

输入图片描述

注意它将展开并显示完整命令: 输入图片描述

例如,在这种情况下,最终命令看起来像这样:

/Users/hoaphan/.sdkman/candidates/java/17.0.4-amzn/bin/java -XX:TieredStopAtLevel=1 
-Dspring.output.ansi.enabled=always 
-Dcom.sun.management.jmxremote 
-Dspring.jmx.enabled=true 
-Dspring.liveBeansView.mbeanDomain 
-Dspring.application.admin.enabled=true 
...blahblahblahblahblah...
com.example.bootgradlej17.Bootgradlej17Application

所以,您可以通过运行这样长的命令来模仿IntelliJ。 但是我建议,如果这是Spring Boot,并且由Gradle构建,在项目根目录中,在build.gradle所在的目录中执行:

./gradlew bootRun

如果你想模仿IntelliJ所做的JVM选项设置,你可以使用像VisualVM这样的工具从IntelliJ运行中捕获此类信息:

在此输入图片描述

然后,您可以配置您的bootRun以使用如下的JVM配置启动:

bootRun {
   jvmArgs = "-Dspring.application.admin.enabled=true", "-Dnannana=nenenene" (etc)....
}

谢谢你,@HoaPhan, 你的回答很有帮助。鉴于它们荒谬的大小限制,我需要写多个评论。
  1. Gradle包装器gradlew是一个绝妙的想法。
- Arthur
visualvm只是捕获最终JVM状态的一种示例方式。如果jvisualvm在某些情况下不可靠,请使用与您的JVM一起提供的实用程序,如$JAVA_HOME/bin/jconsole或查找Java进程的ps命令来执行相同的操作。bootRun { ... }是配置./gradlew bootRun,您可以将其放入build.gradle文件中并进行版本控制/跟踪。有关用法示例,请参见GitHub上的以下链接: https://github.com/search?l=Gradle&o=desc&q=bootRun&s=indexed&type=Code - HoaPhan
感谢@HoaPhan。请查看下面答案中的另一条评论。 - Arthur

1
继续我的上面的评论...
2. 在我的电脑上(运行macOS Big Sur 11.6),VisualVM无法找到JVM参数: enter image description here 相反,它们可以在您解释如何显示的Java命令中找到。例如,我的是:
-Dspring.output.ansi.enabled=always
-Dcom.sun.management.jmxremote
-Dspring.jmx.enabled=true
-Dspring.liveBeansView.mbeanDomain
-Dspring.application.admin.enabled=true
...

请解释您的:
bootRun {
   jvmArgs = "-Dspring.application.admin.enabled=true", "-Dnannana=nenenene" (etc)....
}

例子。这段文字应该在哪里以及如何使用?

  1. 还需要提供任何在IDEA配置中的命令行参数。可以通过 gradlew --args选项传递,像这样:

    --args='--algorithm=batch --numOfStudiesToRetrieve=600'

然而,总的来说,这种方法比我想象的更加临时。它需要一个人去修改 a) IDEA 的java命令以获取JVM参数, b) 通过gradlew--args将命令行参数传递进去。但是我假设IntelliJ IDEA的开发人员没有支持这个重要的功能。


1

通过运行配置执行程序并检查输出的第一行。它应该包含被IDE执行的调用,通常是类似于java -jar ...的内容。

例如,当运行Scratch文件时,我在输出窗口中得到以下内容作为第一行:

/usr/lib/jvm/java-1.11.0-openjdk-amd64/bin/java -javaagent:/home/user/bin/idea-IU-222.3345.47/lib/idea_rt.jar=37117:/home/user/bin/idea-IU-222.3345.47/bin -Dfile.encoding=UTF-8 -classpath /home/user/.cache/JetBrains/IntelliJIdea2022.3/compile-server/backend_dd2372d5/scratches/out:... Scratch

0
由于评论的格式限制非常严格,所以在答案中再次发表评论:
感谢@HoaPhan。但是,当我在build.gradle中插入像这样的bootRun部分时,
bootRun {
  jvmArgs = "-Dspring.output.ansi.enabled=always"
}

IntelliJ IDEA 报错了

Could not compile build file '<path>/build.gradle'.
> startup failed:
  build file '<path>/build.gradle': 1: Unexpected input: '{' @ line 1, column 9.
     bootRun {
             ^

无论该部分放置在文件的哪个位置,似乎都会出现此问题。

但是,以下操作可以正常工作:

bootRun {
    jvmArgs = [ "-Dspring.output.ansi.enabled=always",
                "-Dcom.sun.management.jmxremote",
                "-Dspring.jmx.enabled=true",
                "-Dspring.liveBeansView.mbeanDomain",
                "-Dspring.application.admin.enabled=true",
                "-Dfile.encoding=UTF-8"
    ]
}

目前还不清楚为什么第一个bootRun {会出现语法错误,而第二个却不会。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接