我是很對於Java環境(Eclipse,Spring等)來說並不陌生,現在只是介紹一些入門教程。我剛剛完成了Spring MVC的Hello World教程,其中有一個簡單的頁面,然後發佈到另一個操作。直截了當。執行Java Web App時未發現類
然後我接着修改了一下該教程的工作結果。我的第一個嘗試是在Eclipse中創建另一個項目,只包含一些包含POJO的簡單包。這個想法是讓不同的應用程序可以使用的東西。 (打算相當於.NET世界中的「類庫」項目。)
該項目有一個包,帶有一個接口(IWorld
)和一個類(HelloWorld
)。在我的Spring MVC項目中,我將其他項目添加到構建路徑並在控制器中創建該對象的一個實例。編譯器說,一切都很好:
package com.sandbox.application.mvctest.controllers;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import com.sandbox.domain.models.*;
@Controller
public class HelloWorldController {
@RequestMapping("/")
public String hello() {
IWorld world = new HelloWorld();
world.speak();
return "hello";
//TODO: Return a ModelAndView instead
}
@RequestMapping(value = "/hi", method = RequestMethod.GET)
public String hi(@RequestParam("name") String name, Model model) {
String message = "Hi " + name + "!";
model.addAttribute("message", message);
return "hi";
}
}
的.speak()
方法沒有做筆記的任何事情,只是返回該控制器尚未使用,一個值。當然,其目的是在模型中開始構建一些功能,而不僅僅是在控制器和視圖中構建一些功能,從而構建更多豐富的領域模型。
Eclipse不會抱怨代碼,一切似乎編譯得很好。但在Tomcat運行時,我得到一個異常:
Jul 05, 2017 12:36:49 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Allocate exception for servlet [springDispatcher]
java.lang.ClassNotFoundException: com.sandbox.domain.models.IWorld
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1269)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1104)
at java.lang.Class.getDeclaredMethods0(Native Method)
[and so on...]
我的谷歌搜索已被證明無果而終,到目前爲止,可能是因爲我並不總是知道我發現了什麼。例如,有一些帖子建議糾正pom.xml
文件中的內容。我沒有這樣的文件。這與Spring的依賴注入有關嗎?我應該使用它嗎?我不會認爲這是一個可注入的依賴項,我只是直接創建一個實例。但是,我也正在從一個深陷教條的.NET思維模式中接受這個,所以所有的投注都關閉了。
我在這裏錯過了什麼?
您需要打包「Class Library」並將其包含在Spring應用程序中。在Java中,通常是[jar文件](https://docs.oracle.com/javase/tutorial/deployment/jar/)。通常我們會使用['maven'](https://spring.io/guides/gs/maven/)打包這些庫(這是一個項目理解/依賴管理工具)。它是使用'pom.xml'的'maven'。日食的'maven'插件叫做m2e。你可能會想[「mavenize」](https://stackoverflow.com/questions/2449461/convert-existing-eclipse-project-to-maven-project)你的項目。 –
@ElliottFrisch:有什麼我可以在Eclipse中手動執行以包含它嗎?我正在查看MVC項目的屬性,我看到在「項目引用」下選擇的另一個項目以及在「Java Build Path」中的項目下列出的項目。至少聽起來我應該比我預期的更早地諮詢Maven教程。 (編輯:剛剛看到你的編輯。該mavenize鏈接看起來非常有用,謝謝!) – David