2013-02-27 173 views
12

我想尝试Spring Source的“Spring Loaded”类重载代理,并通过IntelliJ运行Tomcat。IntelliJ + Tomcat +弹簧加载

https://github.com/SpringSource/spring-loaded

我已经添加了JVM参数,以我的Tomcat的运行配置,我的web应用程序启动时没有错误,似乎正常行为。

我真的不知道如何触发类重新加载。我是否需要编译我修改的类?我试过了,看起来没有效果。我需要更新Tomcat并部署类和资源吗?这似乎也不工作......?

任何特定的配置细节将不胜感激。

编辑:更多信息,我认为我的问题可能与使用两个模块,一个核心代码库和一个webapp有关。我对两者都使用Maven,一个配置为jar项目,另一个配置为战争项目。 IntelliJ为爆炸战争设置了Artifact以使用jar模块的jar文件。我尝试切换Artifact配置,将jar模块的编译输出合并到WEB-INF/classes中。现在我在target/webapp/WEB-INF/class/etc中看到.class文件。但我不知道如何让IntelliJ在编辑时更新特定的类文件。

+0

你想出一个办法来处理同春子模块加载? – Damien 2014-06-06 09:46:34

+0

还没有。很长一段时间以来我一直没有回到这方面的工作。 – sdouglass 2014-06-23 17:18:04

回答

5

如果添加以下JVM参数(如弹簧加载页面描述)到Tomcat

-javaagent:<pathTo>/springloaded-{VERSION}.jar -noverify SomeJavaClass 

你应该罚款。这可能有助于禁用您正在测试的webapp在tomcat中的自动重新加载。例如在你的server.xml中:

<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true"> 
    <Context docBase="projekt" path="/projekt" reloadable="false" ... 

这确保只有弹簧加载的类加载器加载改变的类。

+0

感谢您的回答。它是什么触发springloaded classloader来重新加载更改的类?它是否定期发生?它是否监视类文件的时间戳更改?或者我需要在IntelliJ中执行一个动作来触发它? – sdouglass 2014-02-19 00:37:21

+0

根据https://github.com/spring-projects/spring-loaded类文件每秒钟观察一次更改。 – varad 2014-06-20 10:28:27

+0

对不起,你是怎么用IntelliJ改变它的? 我的意思是,这是不可能改变使用IntelliJ,因为你没有“server.xml”的可见性,是吗? – 2015-02-20 17:08:50