类不在Eclipse中自动编译

时间:2016-06-29 02:46:29

标签: eclipse compilation

我正在使用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 / folder

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

所以问题是动作类不会自动编译。当Tomcat启动时,我该怎么做才能编译它?

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

3 个答案:

答案 0 :(得分:0)

检查是否已选择Project > Build Automatically

另外

右键单击打开项目属性,然后选择Deployment Assembly检查项目目标类是否已复制到web-inf/classes

如果这些问题无法解决,我建议你创建一个空项目并选择Dynamic Web Project模板,然后在这个新项目中复制你的文件。

答案 1 :(得分:0)

我终于找到了解决方法:

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

  

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

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

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

以下是如何在Eclipse Build Path中添加JAR:

  

右键单击“Project Explorer”中的项目节点&gt;构建路径&gt;   配置构建路径&gt;切换到“库”标签&gt;单击“添加外部”   JARs“&gt;浏览并选择所有必需的JAR&gt;点击”应用“&gt;   单击“确定”。

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

故事的道德: Eclipse在这样的场景中没有显示任何错误,其中错误源在其自己的操作中!

答案 2 :(得分:0)

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

我如何解决它:

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

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