找不到或加载主类 $JAVA_OPTS。

5

我正在尝试配置Heroku平台的Procfile文件,以在本地运行应用程序。 我正在尝试运行基于Tomcat的Java Web应用程序。

在教程中,他们说:

To build your app locally do this:
Use the Git Bash application to open a command shell on Windows.
$ mvn clean install
$ heroku local web

我正在项目目录中,运行mvn clean install后,我收到以下消息:

BUILD SUCCESS

问题出在当我运行:heroku local web时,我收到了以下错误信息:[WARN] No ENV file found web.1 | Error: Could not find or load main class $JAVA_OPTS 我的Procfile只有一行代码:

web: java $JAVA_OPTS -jar target/dependency/webapp-runner.jar --port $PORT target/*.war

我正在使用Windows系统。我在stackoverflow上看到一个帖子,他们说Procfile文件中的代码在Windows系统下是不同的。应该像这样(由我创建):

web: java %JAVA_OPTS% -jar target\dependency\webapp-runner.jar --port %PORT% target*.war

我需要在target文件夹中创建一个名为“dependency”的文件夹吗?因为我的项目中没有webbapp-runner.jar,并且我不知道该怎么做。
以下是我的pom.xml:
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.rares</groupId>
<artifactId>first-web-application</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>

<dependencies>
    <dependency>
        <groupId>com.github.jsimone</groupId>
        <artifactId>webapp-runner</artifactId>
        <version>8.5.11.2</version>
    </dependency>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-web-api</artifactId>
        <version>6.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.3.6.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
</dependencies>

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <verbose>true</verbose>
                    <source>1.8</source>
                    <target>1.8</target>
                    <showWarnings>true</showWarnings>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <path>/</path>
                    <contextReloadable>true</contextReloadable>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

我应该将webapp-runner作为插件添加吗?


你尝试过同一个帖子中所分享的其他解决方案了吗?比如:web: java %JAVA_OPTS% -cp target\classes;"target\dependency\*" Main。你可以参考这个链接 - Naman
我的主类是什么?我只有一个LoginController Java类和Login Service..一个为我的控制器提供方法的类。 - ProgIsMetal
@ProhIsMetal服务类应该是最好的选择。理想情况下,这个类应该是你想要启动应用程序的类。 - Naman
我稍后会发布包含错误日志的帖子,当我尝试将其上传到Heroku时。但是由于这个错误,我基本上无法为应用程序创建本地服务器...因为我想在本地测试它,所以遇到了麻烦,当我在eclipse中使用tomcat运行应用程序时,可以在localhost:8080 / login看到我想要的东西。我想提一下,我的LoginService类只有一个方法isTrue,它返回true或false。您确定是否能够解决问题? - ProgIsMetal
1
如果您能为这个问题投票,那就太好了!也许有人知道更好的解决方案。谢谢! - ProgIsMetal
2个回答

2

您需要像这样将webapp-runner添加到您的pom.xml中:

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>2.3</version>
        <executions>
            <execution>
                <phase>package</phase>
                <goals><goal>copy</goal></goals>
                <configuration>
                    <artifactItems>
                        <artifactItem>
                            <groupId>com.github.jsimone</groupId>
                            <artifactId>webapp-runner</artifactId>
                            <version>8.5.11.2</version>
                            <destFileName>webapp-runner.jar</destFileName>
                        </artifactItem>
                    </artifactItems>
                </configuration>
            </execution>
        </executions>
    </plugin>

然后你的 Procfile 可以如下所示:

web: java $JAVA_OPTS -jar target/dependency/webapp-runner.jar --port $PORT target/*.war

你的Procfile.windows文件可能看起来像这样:

web: java %JAVA_OPTS% -jar target\dependency\webapp-runner.jar --port %PORT% target\*.war

更多信息请参见使用Webapp Runner部署基于Tomcat的Java Web应用程序


请使用最新版本的插件(https://maven.apache.org/plugins/maven-dependency-plugin/),而不是过时的版本... - khmarbaise
我必须在某处定义$JAVA_OPTS吗? - ProgIsMetal
当我运行:mvn package时,我收到构建成功的消息。但是在运行java -jar target/dependency/webapp-runner.jar target/*.war时,我收到了错误消息:“无法访问jar文件target/dependency/webapp-runner.jar”。 - ProgIsMetal

1
我在stackoverflow上阅读了很多关于这个错误的帖子和Heroku的教程,但没有找到解决方法,不过我做了一些改进。我阅读了this post并删除了pom.xml中的开始标签<pluginManagement>和结束标签<pluginManagement/>,现在dependency目录和webapp-runner-8.0.30.1.jar已经创建。我的应用程序正在工作,因为如果我使用Tomcat在Eclipse中运行我的应用程序,我可以转到localhost:8080/login并查看我的网站。当我运行:

mvn package

我收到build success的消息,然后我在cmd中运行:

java -jar target/dependency/webapp-runner.jar target/*.war

我收到:error invalid or corrupt jarfile target/dependency/webapp-runner.jar

这是我的Procfile:

web: java $JAVA_OPTS -jar target/dependency/webapp-runner.jar --port $PORT target/*.war

这是我的Procfile.windows文件:

web: java %JAVA_OPTS% -jar target\dependency\webapp-runner.jar --port %PORT% target*.war

这是我的pom.xml文件:

<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.rares</groupId>
<artifactId>first-web-application</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>

<dependencies>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-web-api</artifactId>
        <version>6.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.3.6.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
</dependencies>

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <verbose>true</verbose>
                    <source>1.8</source>
                    <target>1.8</target>
                    <showWarnings>true</showWarnings>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <path>/</path>
                    <contextReloadable>true</contextReloadable>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.3</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>copy</goal>
                        </goals>
                        <configuration>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>com.github.jsimone</groupId>
                                    <artifactId>webapp-runner</artifactId>
                                    <version>8.5.11.2</version>
                                    <destFileName>webapp-runner.jar</destFileName>
                                </artifactItem>
                            </artifactItems>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
</build>


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