【问题标题】:Serve Modules without publishing not working in Helios服务模块而不发布在 Helios 中不起作用
【发布时间】:2011-05-07 23:35:13
【问题描述】:

我最近将我一直在开发的 web 应用程序转移到运行 64 位 Eclipse Helios(Service Release 2)的新机器上,并且我正在使用 Maven 插件 M2Eclipse。

我已通过 Eclipse 部署在本地 tomcat 安装上,一切正常(或多或少),但我想选择“不发布服务模块”选项,但当我选择此选项时出现错误:

log4j:ERROR Could not read configuration file from URL [file:/C:/butterfly/svn/trunk/micro/src/main/webapp/WEB-INF/classes/log4j.properties].
java.io.FileNotFoundException: C:\butterfly\svn\trunk\micro\src\main\webapp\WEB-INF\classes\log4j.properties (The system cannot find the file specified)

log4j.properties 文件不存在,就像我在 src/main/resources 中的源目录一样 - 在构建时它被复制到 target/WEB-INF/classes/..

Eclipse 似乎将预期的目标目录与 src 目录混合在一起,因此找不到它。

我不确定这是否仅发生在属性文件上,或者在查找所有构建的资源时是否会出现同样的问题。

我已经看到了这些问题:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=318449

http://www.eclipse.org/forums/index.php?t=msg&goto=661045&S=25bafd85b11e042c169ecf1752bfa479

但它们似乎略有不同或已经修复(My Helios 是上周末新下载的)

有人遇到过这种情况或知道如何解决吗?

【问题讨论】:

  • 你使用的是什么版本的Tomcat?当我迁移到 Tomcat 7 时,我注意到这在我的 Eclipse 版本中出现了问题,这似乎得到了 eclipse.org/forums/… 的证实。显然,这在 Helios 中没有修复,正如最后几个 cmets 所表明的那样。所以解决方法似乎是回到 Tomcat 6...

标签: java eclipse tomcat helios


【解决方案1】:

来自here:“服务模块而不发布选项正如它所说的那样。Web 内容将直接从动态 Web 项目的“WebContent”文件夹中提供。自定义上下文用于使项目的依赖项在Web 应用程序的类加载器”。我希望 Eclipse 在您构建项目后模拟从 WEB-INF/classes 提供每个类/资源文件(包括 log4j.properties)。作为一种解决方法,如何在 WebContent 中创建一个“类”文件夹,将 log4j.properties 文件复制到这里,看看类加载器是否满意?

【讨论】:

  • 感谢您的回复 - 不幸的是,所有已编译的类都不在 web 内容文件夹中(因为 maven 约定构建到 /target/.. 并且所有源文件夹都是 /src/.. 另外,在迁移到 Helios 之前,这在 Galileo 中运行良好,我曾与几个选择“服务模块而不发布”的 maven 项目合作,并且 eclipse 已经从 maven /target/.. 目录运行它们 - 所以你知道这是否只是坏了/删除还是我需要额外的配置步骤?
  • @rhinds 我很确定这是您的项目特有的东西,与此功能自定义类加载器不兼容。您不需要任何额外的配置步骤。但是,正如我之前所说,尝试在 WEB-INF 中创建一个 classes 文件夹并在那里复制 log4j.properties。
  • @Anthony,我在 src/main/webapp/WEB-INF 中创建了 classes 文件夹并复制了 log4j 文件,然后它抱怨persistence.xml,所以我复制了它 - 然后它就可以工作了。这很奇怪,因为在与 log4j 相同的 src 文件夹(src/main/resources)中有其他 Spring XML 配置文件,但它们被正确地从目标输出文件夹中使用。有什么想法吗?
  • @rhinds。 Eclipse 使用自定义的 ClassLoader 来实现“不发布服务模块”的技巧。许多框架使用自己的 ClassLoader。让他们玩得很好(即使是像获得一些类路径资源这样简单的事情)并不是一项简单的任务。既然你们都准备好了,我会去打开/打开投票错误,看看你是否能够获得足够的法定人数。此外,还有其他方法可以实现类似的目标。例如,您可以create a custom context.xml 来满足您的需求。
  • 而且由于您使用的是 maven,因此有一些插件可以为 Tomcat 执行inplace deployment。有什么理由不能让 maven 管理部署?
猜你喜欢
  • 2013-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多