鍍金池/ 問答/Java/ maven工程寫了一個mybatis訪問數(shù)據(jù)庫。打成jar后,反射調(diào)用但是報ma

maven工程寫了一個mybatis訪問數(shù)據(jù)庫。打成jar后,反射調(diào)用但是報mapper未注冊錯誤

用mybatis搞了一個訪問數(shù)據(jù)庫的maven工程,然后打成jar包,在另外一個工程上用反射調(diào)用的方式訪問其中的方法。在myeclipse上沒有問題可以訪問到,但是在idea上出現(xiàn)問題。

public class Test1 {
    public static void main(String[] args) throws Exception {
        File file=new File("D:/class/ML/backer.jar");
        URL url=file.toURI().toURL();
        ClassLoader loader=new URLClassLoader(new URL[]{url});
        try{
            Class<?> cls=loader.loadClass("com.backer.controller.DataSource");
            Object obj=cls.newInstance();
            Method method=cls.getMethod("getAllData", String.class);
            ResponseBean rb=(ResponseBean) method.invoke(obj, new String("admin"));
            System.out.println(rb.getRetMap());
        }catch(Exception e){
            
        }
    }
}

此代碼在myeclipse上運行是沒有錯誤的
然后放在idea上運行則出現(xiàn)以下錯誤

Caused by: org.apache.ibatis.binding.BindingException: Type interface com.sunyard.backer.dao.AlgorithmDataMapper is not known to the MapperRegistry.
    at org.apache.ibatis.binding.MapperRegistry.getMapper(MapperRegistry.java:47)
    at org.apache.ibatis.session.Configuration.getMapper(Configuration.java:745)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.getMapper(DefaultSqlSession.java:292)
    at com.backer.controller.DataSource.getAllData(DataSource.java:31)
    ... 5 more
    

說我寫的mapper沒有被注冊到mybatis里。這個應(yīng)該不是代碼的問題,網(wǎng)上有提到idea和myeclipse的某些差異,應(yīng)該是某些開發(fā)工具的設(shè)置?
另外jar是在myeclipse中開發(fā)的,也是在myeclipse中打的包。
請教應(yīng)該如何設(shè)置,或者有什么辦法?

回答
編輯回答
不二心

好氣,一層層的調(diào)試終于發(fā)現(xiàn)問題。最終的錯誤竟然和一開始描述的問題截然不同。。。
最開始以為是ide的問題,于是分別在myeclipse和idea里用了同樣的代碼(分別用反射的方法和導(dǎo)包buildpath的方法),發(fā)現(xiàn)導(dǎo)過包后反射的方法也可以用了,才發(fā)現(xiàn)原來不是idea的問題。
這樣酒吧問題鎖定在mapper文件未注冊上,然后在網(wǎng)上以該問題為關(guān)鍵詞搜索。網(wǎng)上結(jié)果是說可能文件大小寫名稱不一致,位置不對等等。可是在myeclispe中是可以運行的,于是再次把范圍縮小到j(luò)ar包里。
用壓縮工具打開jar包,果然發(fā)現(xiàn)映射的XML文件沒有,最后問題縮小到打包環(huán)節(jié)上。
上網(wǎng)搜索maven打包,發(fā)現(xiàn)如果需要保留配置文件等內(nèi)容需要在pom中配置的。(其實我已經(jīng)配置過保留resources下的mybatisconfig.xml但是竟然忘記了映射的xml也是需要配置的。。。)
最后終于添加好配置后,運行出結(jié)果。
一波三折。。。

2018年9月4日 18:37