我已经习惯了mvn,但我正在为一个小型Web开发项目测试Gradle(v1.8)。
我注意到 Jetty Gradle 插件支持自动扫描和热部署,所以我启用了它。我的目标是从 Eclipse 重新编译,并在每次更改控制器等时让 Jetty 重新加载上下文。
但是,这是行不通的,主要是因为 Gradle 编译输出转到 build/,但是 Gradle Eclipse 插件创建了一个 .classpath 配置,将所有 Eclipse 输出定向到 /bin(甚至混合了测试和主源文件夹)。
有没有办法?...
- 在单独的控制台上运行分级码头运行。
- 在 Eclipse 上保存修改后的类(触发编译)
- 看到 Jetty 选取更改并重新加载上下文。
根据我的研究,我已经确定了三种解决方法,但没有一种能解决上述问题(如果您有相关评论或更多建议,我将发布它们)
- 调整 Gradle
- Eclipse 配置,将测试和主构建输出定向到 Gradle 使用的同一目录(使用此处看到的模式)。有些人不建议这样做,因为这意味着使用两个可能相互干扰的不同编译系统。
- 使用 Gradle eclipse-wtp 插件生成 WTP2 配置,并使用 Eclipse 的"Run AS -> Run on Server"。这实现了热部署/迭代目标,并使两个系统(IDE 和 Gradle)保持隔离。但是,您需要在 Eclipse 上设置服务器。
- (不是真正的解决方法):我已经测试了 Spring 的 Eclipse 构建 (STS) Gradle 集成,但是集成似乎专注于项目设置,虽然 Gradle 构建可以自动触发,但 Eclipse 编译仍然重定向到 bin/。
所以你对微调热部署感兴趣,对吧?
请考虑使用Gretty gradle插件:https://github.com/akhikhl/gretty
它是一个高级 gradle 插件,用于在码头上运行网络应用程序。它完全符合您的要求,涉及热部署(甚至可能更多)。
披露:我是Gretty插件的作者。
如果您不想更改为其他插件,以下是解决方法的两个步骤:
-
将以下配置添加到您的
build.gradle
:jettyRun { reload = "automatic" scanIntervalSeconds = 1 }
-
每次更改 Java 代码后,请运行以下任务:
gradle compileJava
由于 jetty 正在监视*.class
文件,因此只有在文件更改后*.class
它才会热重载。
请参阅此链接:https://discuss.gradle.org/t/hot-deploy-with-jetty-plugins-jettyrun/7416