我想以下列方式开发一个“基于数据库”的Java桌面应用程序:
我在一个Netbeans项目(ProjectDBL.jar)中开发了(DAL + BL)。
我在一个单独的Netbeans项目(ProjectGUI)中开发了PL
我将ProjectDBL.jar作为编译库导入ProjectGUI。
我没有将EclipseLink库添加到ProjectGUI,因为它们是在ProjectDBL.jar中添加的。
出于同样的原因,我没有将数据库驱动程序库添加到ProjectGUI。
我想完全区分我的DAL + BL和我的PL。进一步的数据库修改(例如MySQL-> SQLServer)不应影响PL中的所有操作。
当我想调用ProjectDBL.jar中的任何方法时,我遇到的问题是一种异常提升:
Exception in thread "main" java.lang.NoClassDefFoundError: javax/persistence/EntityNotFoundException
好像持久性单元不能被外部jar实例化......
答案 0 :(得分:0)
编译的库不包含它使用的所有库。另外,每个jar文件的大小都是50MB,你最终会在类路径中多次出现常用的库。
您需要将您使用的每个库直接或间接添加到类路径中。
答案 1 :(得分:0)
考虑使用企业应用程序原型。
您的DAL和BL将包含在EJB项目中,PL将位于Web项目中。
这个具体案例正是这个原型所针对的,并且将确保您在每个模块中包含必要的库,而不仅仅是编译的类被剥夺了它们的依赖性。
顺便说一下,当使用JPA时,如果你的DAL / BL被封装在EJB类中,你也会得到容器管理事务,所以最好按照你的方式分离类,因为你可以更好地服用JEE广泛的内置管道的优势。