問題定義
我有一個基於Gradle的Spring MVC項目。我有一個網站項目(zeario-web
),網絡爬蟲(zeario-webcrawler
)和共享類(zeario-sharedclientserverclasses
)。網絡和網絡爬蟲共享一些類(如DTO或VO)。在Eclipse中進行調試時,Spring無法從共享的Gradle庫(依賴於autowired bean)中找到類
在我的web應用程序,我有一個getWorkUnit
方法CrawlerController
;這要求在CrawlerService
實例(@Autowired
depdency),這反過來,使用某些類從共享庫的方法。
我的問題是我可以建立並通過搖籃部署我的web應用程序的工作版本,而不是通過Eclipse。 Eclipse給我一個關於找不到其中一個共享類的彈簧運行時異常,因此無法創建/注入服務實例。
從Tomcat日誌:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'crawlerController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.zeario.service.CrawlerService com.zeario.api.v1.controller.CrawlerController.service; nested exception is java.lang.NoClassDefFoundError: com/zeario/api/v1/model/workunit/PageDiscoveryWorkUnit
代碼段
控制器定義(簡化):
@Controller
public class CrawlerController {
@Autowired
private CrawlerService service;
// ... methods with @RequestMapping ...
}
服務類(簡化):
@Service
public class CrawlerService {
public PageDiscoveryWorkUnit getPageDiscoveryWorkUnit() {
return new PageDiscoveryWorkUnit();
}
PageDiscoveryWorkUnit
是一個簡單的POJO/Bean類。我在spring-servlet.xml
文件中聲明我的服務組件:
<bean id="crawlerService" class="com.zeario.service.CrawlerService" />
搖籃配置
1)根項目(空的,沒有源)定義settings.gradle
子項目。依賴關係是在build.gradle
:
project(':zeario-web') {
dependencies {
compile project(':zeario-sharedclientserver')
}
}
project(':zeario-webcrawler') {
dependencies {
compile project(':zeario-sharedclientserver')
}
}
2)項目定義對其他項目的依賴關係,其中適用。例如,Web項目構建文件包含:
dependencies {
// Guava, Spring MVC, etc. ...
packed project(':zeario-sharedclientserver') // Shared code
// ...
}
Eclipse配置
當我檢查構建路徑,Eclipse中正確顯示項目的依賴;例如,它顯示web
項目對shared client/server
項目有依賴性。
那麼你使用Eclipse本身來構建?或者通過* Eclipse而不是命令行運行Gradle * – Vidya
@Vidya我正在使用Eclipse本身來構建。 Gradle構建基礎架構僅用於管理依賴關係,並支持構建JAR以部署到生產環境。 – ashes999