最近自己搭建了maven仓库,在使用的时候出现了如下报错:
com.android.dx.cf.iface.ParseException: class name (com/bruce/a/dm/BuildConfig) does not match path (com/bruce/a/DM/BuildConfig.class)
at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:520)
at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)
at com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388)
at com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251)
at com.android.dx.command.dexer.Main.processClass(Main.java:704)
at com.android.dx.command.dexer.Main.processFileBytes(Main.java:673)
at com.android.dx.command.dexer.Main.access$300(Main.java:83)
at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:602)
at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
at com.android.dx.command.dexer.Main.processOne(Main.java:632)
at com.android.dx.command.dexer.Main.processAllFiles(Main.java:510)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:280)
at com.android.dx.command.dexer.Main.run(Main.java:246)
at com.android.dx.command.dexer.Main.main(Main.java:215)
at com.android.dx.command.Main.main(Main.java:106)
Google上的结果大多数都是建议使用build clean来解决。但是这并没有什么卵用,报错依然在。
分析之后有以下结论:
1.根本原因:这个问题是由maven仓代码没有注意library中Mainifest文件的packageName大小写导致的。
2.次要原因:gralde插件在判断类时完全没有考虑大小写的情况。不过这样做没错。
解决方法:更新maven仓中Manifest文件的packageName,将其中的小写dm改为大写DM,升个版本,更新到maven仓。然后本地一更新就OK了。