在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
一个问题的解决方案也解决了这个问题:码头运行战争仅使用命令行