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

The specified target project directory src\main\java does not exist
生成代码报错。

源码跟一下:

org.mybatis.generator.api.MyBatisGenerator#generate(org.mybatis.generator.api.ProgressCallback, java.util.Set<java.lang.String>, java.util.Set<java.lang.String>, 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:src\main\java
mac: src/main/java
不注意的话就报错给你看😂。
基本就是这么一个debug过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值