我想创建一个应该最小化项目之间依赖关系的项目。我的项目结构如下。
com.example.persistence
将包含所有实体和一个BaseDao,其中包含用于保存实体的保存方法。
package com.example.pl;
public class BaseDao {
public void save(Object obj){
System.out.println("Saved the object"+obj);
}
}
com.example.dao
将包含将实体保存到数据库中的方法。保存方法基本上调用了persitence层中的BaseDao.save
方法。
package com.example.dao;
import com.example.pl.BaseDao;
public class EmployeeDao extends BaseDao{
@Override
public void save(Object obj) {
// TODO Auto-generated method stub
super.save(obj);
}
}
com.example.service,它是一个将访问Dao.Save()
方法的服务层。
现在我在服务层本身编写了一个main方法来测试依赖项。当我运行main方法时,它会给出一个下面的编译错误
package com.example.sl;
import com.example.dao.EmployeeDao;
public class EmployeeService {
public static void main(String[] args) {
EmployeeDao dao =new EmployeeDao();
dao.save(null);
}
}
The type com.example.pl.BaseDao cannot be resolved. It is indirectly referenced from required .class files
我知道我在服务层的持久层中缺少jar。那么,如果没有在服务层中添加持久层的依赖性,有什么办法吗?
答案 0 :(得分:0)
如果不知道如何组织项目,很难回答。所以,我会冒昧地假设你正在使用Maven。我假设您定义了三个项目/模块(persitence,dao,service),这将导致persistence.jar,dao.jar和service.jar。
因此,服务模块将依赖于dao模块,而dao模块将依赖于持久性模块。 maven like工具的美妙之处在于它将传递依赖性。因此,pom.xml(maven artifact - 定义项目定义)只会声明对dao的依赖。
然而,只是直接回答你的问题,你从类路径中缺少持久性的lib jar。再一次,很难回答不知道你的项目结构。
答案 1 :(得分:0)
以某种形式或方式,您必须添加持久性依赖项。如果您正在使用maven多模块项目,如果您尝试在子项目中运行maven命令,有时会发生此错误,因为它将无法从其他模块中找到jar。如果它是一个普通的maven项目而你的dao.jar依赖于persistence.jar,它应该通过传递依赖将你的persistence.jar拉入你的项目中。 (净结果,即使你没有特别引用它,你也会以某种方式得到它。)
如果您不使用maven或其他依赖项管理工具,则需要将persistence.jar放入类路径/项目中。依赖关系管理工具正在为您做这件事,如果您已正确设置依赖关系并且没有尝试让服务排除来自DAO层的传递依赖关系的持久性。您的DAO中有对象,这些对象是在persistence.jar中的对象之上编译的。它必须能够访问那些来编译项目的人。
答案 2 :(得分:0)
从它听起来的样子,你建立的方式......
dao
取决于persistence
和service
取决于dao
。 应该才能正常工作。您不是直接依赖persistence
图层中的service
,而是使用做的组件。除非我们任何一个人可能忽略了任何内容,否则您的依赖关系链不会直接依赖persistence
。
根据你的做法(Maven,Gradle,Ivy等),将它们分成各自独立的模块可能是有益的;这样,层次结构清晰,引入意外依赖的可能性非常小。
使用该层次结构,您可以确保dao
对persistence
有一种拒绝,service
依赖于dao
。