如果缺少JAR依赖项,如何获取编译错误?

时间:2017-08-23 08:17:08

标签: android android-studio gradle jar dependencies

我有一个包含以下依赖项的Android项目:

-- Android App

---> MySDK.Jar 

------> 'org.apache.commons:commons-lang3:3.5'

这是一个依赖于commons-lang3的MySDK.jar。

我正在使用Android Studio,因此我正在使用Gradle。

这是我的问题: 我已经向某人分享了“MySDK.Jar”,并且他已经构建了自己的Android应用程序。 它工作但我们已经看到编译器没有注意到'org.apache.commons:commons-lang3:3.5'的缺失依赖。在运行时,如果调用使用'org.apache.commons:commons-lang3:3.5'的代码,则会发生崩溃。如果他不使用此库调用代码,则可能不会注意到该问题。

我知道我们可以通过将以下行添加到Android App build.gradle文件来解决此问题:

compile 'org.apache.commons:commons-lang3:3.5'

我想知道是否有办法让编译错误表明这样的遗漏依赖?在编译时而不是在运行时看到依赖问题确实更好。

建议的良好做法是什么?

谢谢!

3 个答案:

答案 0 :(得分:0)

如果您只是在项目中添加jar文件,则无法警告缺少的依赖项。

要做到这一点,你必须在 maven repo 中发布jar文件 通过这种方式,您可以使用pom文件来描述gradle必须下载的依赖项。

答案 1 :(得分:0)

commons-lang3Android App传递依赖关系。因此,编译通常不需要它 - 有例外,特别是关于多级继承。所以在编译时你(通常)不知道你是否错过了在运行时需要的传递依赖。

这是Gradle的用武之地.Gradle可以(作为Maven)从Maven存储库(作为MavenCentral)解析依赖传递。如果将MySDK放入Maven存储库(如Nexus或Artifactory,它们具有开源版本),则使用MySDK的每个人都将自动绘制commons-lang3,这样您就不会在运行时遗漏任何内容。

答案 2 :(得分:-1)

MySDK.init()中提供类似MySDK.jar的方法,在org.apache.commons:commons-lang3:3.5'方法中调用属于MySDK.init()的方法,然后将init()放入{{1}您的onCreate()

另一种方法是,将Application放入org.apache.commons:commons-lang3:3.5

希望它可以帮助你:)