我有一个包含以下依赖项的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'
我想知道是否有办法让编译错误表明这样的遗漏依赖?在编译时而不是在运行时看到依赖问题确实更好。
建议的良好做法是什么?
谢谢!
答案 0 :(得分:0)
如果您只是在项目中添加jar文件,则无法警告缺少的依赖项。
要做到这一点,你必须在 maven repo 中发布jar文件 通过这种方式,您可以使用pom文件来描述gradle必须下载的依赖项。
答案 1 :(得分:0)
commons-lang3
是Android 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
,
希望它可以帮助你:)