我需要在testRuntime配置中控制jar的顺序.
我必须确保robolectric-xxjar在android.jar之前,否则我得到了可怕的RuntimeException("Stub!").
我怎么做?
我得到java.lang.RuntimeException: Stub!异常,当我尝试解析String到org.json.JSONObject.我的Android API版本是19.
这是我的String解析:
{
"url": "http://www.google.com",
"cookie": "012121",
"filename": "Google"
}
JSONObject jsonObject = new JSONObject(str); // getting exception at this line
String url = jsonObject.getString("url");
Run Code Online (Sandbox Code Playgroud) 一个项目在 Google App Engine 上运行。该项目的依赖项使用了由于安全限制而无法在 App Engine 上调用的类(它不在白名单中)。我的(非常hacky)解决方案是将该类的修改版本复制到我的项目中(匹配原始类的名称和包),不需要受限类。这适用于 dev 和 live,我假设是因为我的源出现在我的外部依赖项之前的类路径中。
为了使它更简洁,我决定将该类的修改版本放入它自己的项目中,该项目可以打包在一个 jar 中并发布给其他任何遇到此问题的人使用。
这是我的 build.gradle:
// my jar that has 'fixed' version of Class.
compile files('path/to/my-hack-0.0.1.jar')
// dependency that includes class that won't run on appengine
compile 'org.elasticsearch:elasticsearch:1.4.4'
Run Code Online (Sandbox Code Playgroud)
在我的本地开发服务器上,这工作正常,代码在运行时首先找到我的类的黑客版本。在直播中,由于某些未知原因,首先加载 elasticsearch 依赖项中的版本。
我知道在类路径中拥有同一个类的两个版本并不理想,但我希望我可以可靠地强制我的版本位于类路径的开头。有任何想法吗?或者,有没有更好的方法来解决这个问题?
java google-app-engine classpath dependency-management gradle
gradle ×2
java ×2
android ×1
android-json ×1
classpath ×1
json ×1
robolectric ×1
unit-testing ×1