来自当前目录且不带 sudo 的 java WAR 应用程序的开发服务器



在Rails和大多数现代Web框架中,我可以通过使用单个简单的命令(rails server)运行开发服务器并访问浏览器来轻松地交互式开发Web应用程序。

对于Java WAR应用程序,我能找到运行它的唯一方法是安装tomcat,构建并将应用程序复制到它的webapps文件夹中,这需要sudo。

有没有更简单的方法可以在没有 sudo 的情况下运行这样的 WAR 应用程序进行开发,并且无需复制目录(这特别糟糕,因为 webapps 文件夹因安装而异)?

基于iNotice的保存构建将是一个加号,因此我可以编辑文件并在重新加载浏览器后立即看到结果。

我不限于使用Tomcat:任何能够运行WAR文件的Servlet/JSP实现都可以为我服务。

使用 Maven

如果您已经在使用 Maven 来构建您的项目,那么最简单的途径可能是 Jetty Maven 插件。

首先,将其添加到您的pom.xml:

<plugin>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-maven-plugin</artifactId>
  <version>9.2.7-SNAPSHOT</version>
</plugin>

然后,您可以使用以下命令从命令行运行 Jetty 服务器:

mvn jetty:run

这非常类似于 Rails,因为它在您的控制台中启动服务器。它会监视对应用程序源文件或配置文件的更改,并根据需要重新加载。

sudo 没有问题,因为您没有将 war 文件打包并部署到其他地方的 tomcat 实例。相反,它直接从 Maven 创建的输出目录中将您的应用程序作为分解的战争文件运行。

但是,我很欣赏这听起来比实际容易 - 大部分工作很可能是将您的项目转换为 Maven......

将独立码头与自动 Web 应用部署结合使用

如果您不想将项目移交给Maven,另一种方法是使用Jetty的自动化Web应用程序部署。

码头跑步者是我能找到的最佳选择。

使用 Maven 安装后,您可以执行以下操作:

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

要安装,请安装到您的pom.xml

<build>
    ...
    <plugins>
        ...
        <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>org.mortbay.jetty</groupId>
                                <artifactId>jetty-runner</artifactId>
                                <version>7.5.4.v20111024</version>
                                <destFileName>jetty-runner.jar</destFileName>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

并运行:

mvn package

但是,当然,您不会被迫使用Maven。

这是Heroku推荐的方法:https://devcenter.heroku.com/articles/deploy-a-java-web-application-that-launches-with-jetty-runner

一个

问题的解决方案也解决了这个问题:码头运行战争仅使用命令行

最新更新