【问题标题】:Classes not auto compiling in Eclipse类不在 Eclipse 中自动编译
【发布时间】:2016-06-29 02:46:29
【问题描述】:

我正在使用 Eclipse,在 struts.xml,如果我使用:

<action name="hello">
            <result>
               /hello.jsp
            </result>
</action>

当我访问 localhost:8080/app/hello 时这有效

但是如果我添加一个自定义的动作类,比如:

<action name="hello" class="com.hah">
            <result>
               /hello.jsp
            </result>
</action>

hah.java 不会自动编译,它给了我异常:

Unable to load configuration. - action - file:/D:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/Struts2/WEB-INF/classes/struts.xml:17:46
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:58)
    at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:360)
    at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:403)
    at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:69)
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:48)
    at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:279)
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4658)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5277)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: Action class [com.hah] not found - action - file:/D:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/Struts2/WEB-INF/classes/struts.xml:17:46
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.verifyAction(XmlConfigurationProvider.java:405)
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addAction(XmlConfigurationProvider.java:355)
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addPackage(XmlConfigurationProvider.java:460)
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadPackages(XmlConfigurationProvider.java:265)
    at org.apache.struts2.config.StrutsXmlConfigurationProvider.loadPackages(StrutsXmlConfigurationProvider.java:111)
    at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:189)
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:55)
    ... 16 more

但我可以通过手动编译hah.java(通过使用javac hah.java)使其正常工作并将编译后的hah.class移动到/D:/workspace/.metadata/.plugins/org.eclipse.wst .server.core/tmp0/wtpwebapps/Struts2/WEB-INF/classes/文件夹

我检查了Build AutomaticallyDeployment Assembly 中有一个条目“/src WEB-INF/classes”。

所以问题是动作类没有自动编译。 Tomcat启动时如何编译?

ps:最后,我为 Java EE 重新安装 eclipse 并使用 struts-2.3.29,它可以工作。 但我还是不知道为什么..

【问题讨论】:

  • 删除war文件,清理并重新构建
  • 这不起作用。
  • 在不知道你的构建环境、目录布局等的情况下,我们只能猜测。
  • 感谢 Dava 的建议,我还应该提供哪些信息?

标签: eclipse compilation


【解决方案1】:

检查Project &gt; Build Automatically是否被选中。

还有

右键打开项目属性,选择Deployment Assembly查看项目目标类是否复制到web-inf/classes

如果这些都不能解决,我建议你创建一个空项目并选择Dynamic Web Project模板,并将你的文件复制到这个新项目中。

【讨论】:

  • 如果没有“自动部署”选项,这还不够。
  • 通过设置Project &gt; Build Automatically,eclipse 将始终构建源并将它们放在target 文件夹中。在 Eclipse 启动 Tomcat 之前,它会复制 target 包括之前在 Deployment Assembly 中定义的其他资源。服务器选项中有一个Automatically publish when resources change,它将资源复制到Tomcat。我想最后一个就是你提到的!
  • 我已经检查了“自动构建”,并且在这个项目的部署程序集中有一个条目“/src WEB-INF/classes”。我也从一开始就重新创建了项目(一整天......),但它仍然无法正常工作,因为 WEB-INF/classes 中没有类文件。
【解决方案2】:

我终于找到了解决办法:

这就是发生的事情: 我有同样的问题。即使在以下路径中创建了包,Eclipse 也没有将 Java 类编译到 .class 文件中:

[workspace_root].metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\2_StrutsReadingProject\WEB-INF\classes\

我尝试在 cmd 提示符下手动编译类。原来我错过了 BUILD PATH 中的 JAR 文件。我所有的 JAR 都是正确的,没有重复。但似乎 Eclipse 在您的构建路径以及 WEB-INF/lib 文件夹中都需要这些 JAR。

在我在这两个地方添加 JAR 并从 Eclipse 再次构建项目后,这些类已正确编译。

下面是如何在 Eclipse 构建路径中添加 JAR:

右键单击“项目资源管理器”中的项目节点>构建路径> 配置构建路径>切换到“库”选项卡>单击“添加外部 JAR” > 浏览并选择所有需要的 JAR > 单击“应用” > 点击“确定”。

希望这将为许多人解决此错误!如果没有,请尝试手动编译该类,CMD 提示符将准确显示任何错误。

故事的寓意: Eclipse 在这种情况下不会显示任何错误,错误的根源在于它自己的操作!

【讨论】:

    【解决方案3】:

    有同样的问题,显然这可能是从磁盘(即:在 lib 文件夹中)删除库文件(.jar)但没有从构建路径中删除时引起的。

    我是如何解决的:

    1. 从磁盘中删除 .jar 库后
    2. 打开 Java 构建路径。如何:
      • 在项目资源管理器中,右键单击项目名称并选择属性
      • 在“属性”窗口中选择“Java Build Path”
    3. 找到相应的条目(您删除的文件名)
    4. 然后点击删除
    5. 点击“应用并关闭”

    如果选择“自动构建”,这将自动重建项目(菜单:项目>“自动构建”)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-19
      • 1970-01-01
      • 2011-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多