Intellij:如何将模块编译输出添加到web-inf / classes而不是web-inf / lib?

时间:2015-07-09 07:58:30

标签: maven intellij-idea war web-application-project

我正在使用maven在IntelliJ中设置一个war项目并在其中运行GlassFish。战争项目取决于其他几个模块。当我以调试模式运行项目时,热部署更改的代码更改会导致NoClassDefFound个异常。我发现IntelliJ尝试重新部署模块jar,但GlassFish会对其进行锁定,因此失败。该模块中的所有类现在都不可用,导致这些NoClassDefFound例外。

IntelliJ以这种方式生成工件:依赖模块都被添加为jar依赖项,就像它们是外部依赖项一样:

img: Automatically generated artifact

现在,当我删除jar依赖项时,IntelliJ告诉我它发现了一些缺少的依赖项,并建议修复以添加缺少的依赖项。

修复这些依赖项会将模块编译输出添加到WEB-INF\classes文件夹。

img: dependencies in classes folder

部署后,IntelliJ不再有问题将更改的类热部署到GlassFish,因为没有jar可以保持锁定。

问题

每当我对任何pom.xml进行更改时,IntelliJ会自动刷新工件,这很好:我绝对希望看到这些更改出现在工件中。但是,所有模块都会再次添加为jar依赖项。

问题

如何确保IntelliJ将项目模块的编译输出添加到WEB-INF\classes而不是WEB-INF\lib

我找到this question,但它有两个问题:

  1. 有许多模块依赖项,所以如果可能的话,我希望避免在解包目标中逐一指定它们
  2. IntelliJ似乎忽略了这一点。当我添加该配置并且它在maven命令行构建中完美运行时,IntelliJ仍然拒绝将模块编译输出添加到WEB-INF\classes目录
  3. 我发现a bugreport询问同样的事情,但对我而言,很难相信没有办法解决这个问题。使用IntelliJ的其他webapp开发人员必须遇到同样的问题,这使得热部署代码更改变得很困难,除非我在pom配置中做错了。

0 个答案:

没有答案