包扫描跳过 jar 文件中的映射器文件

package scanning skipping mapper files in jar file

包扫描似乎跳过了打包在 jar 文件中的映射器文件。

例如:

<mappers>
  <!-- Doesn't work when I package my project as a JAR. -->
  <package name="testmy.sqlmaps" />
  <!-- Works even when mapper files are in a JAR file. -->
  <!--mapper class="testmy.sqlmaps.TestMyMapper" /-->
  <!--mapper class="testmy.sqlmaps.MySecondMapper" /-->
</mappers>

当我通过 Eclipse 或通过命令行作为 "exploded jar" 运行 我的项目时,一切正常,但是如果我从 Eclipse 将我的应用程序作为 jar 导出,然后 运行 它通过命令行然后我得到以下堆栈跟踪:

org.apache.ibatis.binding.BindingException: Type interface testmy.sqlmaps.TestMyMapper 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:675)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.getMapper(DefaultSqlSession.java:250)
    at testmy.dao.TestMyDAO.testMyBatisQuery(TestMyDAO.java:9)
    at testmy.batch.TestMybatis.main(TestMybatis.java:17)

就好像 ResolverUtil 正在跳过我的应用程序 jar 或不知道在里面寻找好东西。

有什么想法吗?

在 Mybatis 用户组的热心帮助下,我得以解决问题。

在 Eclipse 中将项目导出为 jar 文件时,如果在 "JAR File Specification" 步骤中取消选中 "Add directory entries" 复选框,则会出现此问题。确保复选框被选中解决了问题。