2

我习惯了 mvn,但我正在为一个小型 Web 开发项目测试 Gradle (v1.8)。

我注意到 Jetty Gradle 插件支持自动扫描和热部署,所以我启用了它。我的目标是每次更改控制器等时从 Eclipse 重新编译并让 Jetty 重新加载上下文。

但是,这不起作用,主要是因为 Gradle 编译输出转到build/,但是 Gradle Eclipse 插件创建了一个 .classpath 配置,将所有 Eclipse 输出定向到/bin(甚至混合测试和主源文件夹)。

有办法吗?...

  1. 在单独的控制台上运行 graddle jettyRun。
  2. 在 Eclipse 上保存修改后的类(触发编译)
  3. 看到 Jetty 获取更改并重新加载上下文。

根据我的研究,我已经确定了三种解决方法,但它们都没有解决上述问题(我发布它们以防您有相关评论或更多建议)

  1. 调整 Gradle Eclipse 配置以将测试和主要构建输出定向到 Gradle 使用的同一目录(使用此处看到的模式)。有些人不建议这样做,因为这意味着使用两种不同的编译系统,可能会相互干扰。
  2. 使用 Gradle eclipse-wtp 插件生成 WTP2 配置,并使用 Eclipse 的“Run AS -> Run on Server”。这实现了热部署/迭代目标,并使两个系统(IDE 和 Gradle)保持隔离。但是,您需要在 Eclipse 上设置服务器。
  3. (不是真正的解决方法):我已经测试了 Spring 的 Eclipse 构建(STS)Gradle 集成,但是似乎集成专注于项目设置,虽然 Gradle 构建可以自动触发,但 Eclipse 编译仍然重定向到 bin/ .
4

2 回答 2

3

所以你对微调热部署很感兴趣,对吧?

请考虑使用 Gretty gradle 插件:https ://github.com/akhikhl/gretty

它是一个高级 gradle 插件,用于在 jetty 上运行 web 应用程序。关于热部署(甚至可能更多),它完全符合您的要求。

披露:我是 Gretty 插件的作者。

于 2014-05-05T16:05:13.463 回答
0

如果您不想更改为其他插件,这里有两个解决方法:

  1. 将以下配置添加到您的build.gradle jettyRun { reload = "automatic" scanIntervalSeconds = 1 }

  2. 每次更改 java 代码后,运行以下任务: gradle compileJava

因为码头正在监视文件,所以只有在文件更改*.class后才会热重载。*.class

参考这个链接:https ://discuss.gradle.org/t/hot-deploy-with-jetty-plugins-jettyrun/7416

于 2016-10-24T01:30:44.207 回答