我正在使用maven在IntelliJ
中设置一个war项目并在其中运行GlassFish
。战争项目取决于其他几个模块。当我以调试模式运行项目时,热部署更改的代码更改会导致NoClassDefFound
个异常。我发现IntelliJ
尝试重新部署模块jar,但GlassFish
会对其进行锁定,因此失败。该模块中的所有类现在都不可用,导致这些NoClassDefFound
例外。
IntelliJ
以这种方式生成工件:依赖模块都被添加为jar依赖项,就像它们是外部依赖项一样:
现在,当我删除jar依赖项时,IntelliJ
告诉我它发现了一些缺少的依赖项,并建议修复以添加缺少的依赖项。
修复这些依赖项会将模块编译输出添加到WEB-INF\classes
文件夹。
部署后,IntelliJ
不再有问题将更改的类热部署到GlassFish,因为没有jar可以保持锁定。
每当我对任何pom.xml
进行更改时,IntelliJ
会自动刷新工件,这很好:我绝对希望看到这些更改出现在工件中。但是,所有模块都会再次添加为jar
依赖项。
如何确保IntelliJ将项目模块的编译输出添加到WEB-INF\classes
而不是WEB-INF\lib
?
我找到this question,但它有两个问题:
IntelliJ
似乎忽略了这一点。当我添加该配置并且它在maven命令行构建中完美运行时,IntelliJ
仍然拒绝将模块编译输出添加到WEB-INF\classes
目录我发现a bugreport询问同样的事情,但对我而言,很难相信没有办法解决这个问题。使用IntelliJ
的其他webapp开发人员必须遇到同样的问题,这使得热部署代码更改变得很困难,除非我在pom
配置中做错了。