栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MyBatisGenerator逆向工程根据数据库生成代码

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MyBatisGenerator逆向工程根据数据库生成代码

The specified target project directory srcmainjava does not exist
生成代码报错。

源码跟一下:

org.mybatis.generator.api.MyBatisGenerator#generate(org.mybatis.generator.api.ProgressCallback, java.util.Set, java.util.Set, boolean)

找到保存文件入口:

org.mybatis.generator.api.MyBatisGenerator#writeGeneratedXmlFile

    private void writeGeneratedXmlFile(GeneratedXmlFile gxf, ProgressCallback callback)
            throws InterruptedException, IOException {
        File targetFile;
        String source;
        try {
        //此处就是generatorConfig.xml中targetProject和targetPackage拼接出来的路径
            File directory = shellCallback.getDirectory(gxf
                    .getTargetProject(), gxf.getTargetPackage());
            targetFile = new File(directory, gxf.getFileName());
            	//省略...
    }

继续进入shellCallback.getDirectory:

org.mybatis.generator.api.ShellCallback#getDirectory,ShellCallback是个接口,只有一个实现类:org.mybatis.generator.internal.DefaultShellCallback#getDirectory

   public File getDirectory(String targetProject, String targetPackage)
            throws ShellException {
        // targetProject is interpreted as a directory that must exist
        //
        // targetPackage is interpreted as a sub directory, but in package
        // format (with dots instead of slashes). The sub directory will be
        // created
        // if it does not already exist
		//重点
        File project = new File(targetProject);
        if (!project.isDirectory()) {
            throw new ShellException(getString("Warning.9", //$NON-NLS-1$
                    targetProject));
        }

        StringBuilder sb = new StringBuilder();
        StringTokenizer st = new StringTokenizer(targetPackage, "."); //$NON-NLS-1$
        while (st.hasMoreTokens()) {
            sb.append(st.nextToken());
            sb.append(File.separatorChar);
        }

        File directory = new File(project, sb.toString());
        if (!directory.isDirectory()) {
            boolean rc = directory.mkdirs();
            if (!rc) {
                throw new ShellException(getString("Warning.10", //$NON-NLS-1$
                        directory.getAbsolutePath()));
            }
        }

        return directory;
    }

跟到

		File project = new File(targetProject);
        if (!project.isDirectory()) {
            throw new ShellException(getString("Warning.9", //$NON-NLS-1$
                    targetProject));
        }

答案就呼之欲出了,主要看这个targetProject路径创建出来的File是不是isDirectory,不是的话就直接报错。
debug一下这个地方:
查看一下当前在那个路径

不是Directory,直接抛异常


其实上面找到根路径之后,自己根据项目结构来构造就可以了。
ps:说个题外话,mac和windows解析路径分隔符可能不太一样,
windows:srcmainjava
mac: src/main/java
不注意的话就报错给你看。
基本就是这么一个debug过程。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/926796.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号