【问题标题】:What is the command line parameter for my app?我的应用程序的命令行参数是什么?
【发布时间】:2020-11-21 22:43:36
【问题描述】:

我制作了我的第一个 Spring Boot 应用程序,它运行良好,我想将它部署到我的 VPS 服务器,但出现了问题。我不能在命令行界面上运行它,当我双击它时它工作正常。

到目前为止我尝试过的命令:

java -jar jarfilename.jar

mvn spring-boot:run

mvnw spring boot:run

它们都不起作用我很乐意将 maven 依赖项添加到我的 pom.xlm 但我现在只想知道如何了解双击时给出的命令。

mvn 和 java 命令都定义在路径 btw 中

POM 文件 ->

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven 4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.1.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>name</groupId>
<artifactId>test1</artifactId>
<version>1.0-SNAPSHOT</version>
<name>test1</name>
<description>My personal webpage</description>

<properties>
    <java.version>14</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.webjars</groupId>
        <artifactId>jquery</artifactId>
        <version>1.9.1</version>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.12</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
        <version>2.2.5.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.0</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

【问题讨论】:

  • 我认为您尝试的第一个命令就是您需要的。 Maven 用于构建和开发。只是您可能需要使用 -cp 选项添加正确的类路径,或者构建具有完全依赖关系的 jar,因此您不需要类路径。
  • 你得到什么错误?
  • 线程“main”中的异常 java.lang.UnsupportedClassVersionError: main/Application 已由更新版本的 Java Runtime(类文件版本 58.0)编译,此版本的 Java Runtime 仅识别类文件版本高达 52.0

标签: java spring spring-boot maven jar


【解决方案1】:

你应该了解一下spring boot应用程序的开发过程——对你有很大帮助:

Maven 是一个构建工具,用于从您的源文件创建应用程序的 jar(也称为 Artifact)。 Maven 编译您的源代码,运行您拥有的测试,将工件打包到 target 文件夹中,该文件夹应在您运行 mvn package 命令后创建。

之后,如果pom.xml 中的定义正确,您将能够运行以下命令:

cd target

java -jar my-app.jar 

  • 这里的my-app.jar 是工件的名称,您可以在target 文件夹中找到它。

请注意,对于 Spring Boot 应用程序,您应该使用在 pom.xml 中定义的 spring-boot-maven-plugin,看起来您已经正确完成了

【讨论】:

  • 如你所见,我在 build>plugins>plugin 下有 spring-boot-maven-plugin
【解决方案2】:

所以,您正在使用 java8 运行 java 14 字节码

我认为当你双击时,系统会根据字节码版本找到合适的 JVM。当你从命令行运行时,会从路径中获取第一个 JVM。

使用这里提到的属性https://maven.apache.org/plugins/maven-compiler-plugin/examples/set-compiler-source-and-target.html#

<properties>
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.source>1.8</maven.compiler.source>
</properties>

【讨论】:

  • 但是当我双击时使这个应用程序运行的命令是什么?不想每次看到这个问题就降低版本。
  • 你能在你的机器上运行java -version吗?
  • 是的,我可以运行 java -version 它显示“java 版本 1.8.0_261”,但我可以在 IDE 中运行 java 14,这是配置错误吗?
  • 所以无论何时从命令行运行,它都会使用 java8 运行。你可以做一个快速肮脏的实验,而不是通过mave运行,你可以做的是,你可以使用java -jar filename.jar命令并检查输出..它应该拿起java8。
【解决方案3】:

如果你想把它带到 vps,最好的选择是使用 JAR 或战争。

与源一起使用显然不是在服务器上运行的好方法。

要创建jar,可以在maven中使用package target。

在项目根目录中运行mvn package 命令。

它会生成如下日志

查找Building jar: 并将jar 复制到VPS。

然后运行java -jar jarfilename.jar

顺便说一句,你的机器上有 java 14 吗?我认为这就是您的构建无法正常工作的根本原因。

<properties>
    <java.version>14</java.version>
</properties>

尝试将其更改为旧版本,您的构建可能会开始工作。

【讨论】:

  • 它不能在我开发它的计算机上运行(除非我双击运行它)
  • 你得到什么错误?能否请您提供日志?
  • 线程“main”中的异常 java.lang.UnsupportedClassVersionError: main/Application 已由更新版本的 Java Runtime(类文件版本 58.0)编译,此版本的 Java Runtime 仅识别类文件版本高达 52.0
  • 当我将它降低到java 8时它可以工作,但我想知道的是为什么当我双击而不降低版本时它会工作
  • 所以,您正在使用 java8 运行 java 14 字节码,我认为当您双击时,系统会根据字节码版本找到合适的 JVM。当您从命令行运行时,会采用路径中的第一个 JVM .
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-04
  • 2013-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多