在运行时在Android Maven项目中找不到DrawerLayout

时间:2014-12-24 00:04:43

标签: java android maven

好的,所以我一直试图找出这个问题几个星期了,并且在StackOverflow上大量查看类似的问题并试图将它们应用到我自己的情况无济于事。我担心我只是在做一些令人难以置信的愚蠢或忘记愚蠢的事情并浪费某些人的时间,但此时我已经没有选择和想法了,所以如果最终成为案例就道歉。我不使用Eclipse或Android Studio,只使用CLI Maven。我需要在我的应用程序中使用DrawerLayout,但是由于无法在运行时找到类(并且可能是support-v4包的其余部分)而导致应用程序实例化时应用程序崩溃。所以,一步一步。

以下是创建DrawerLayout的代码行:

DrawerLayout drawer = new android.support.v4.widget.DrawerLayout(this);

这是应用程序在尝试创建DrawerLayout的新实例时崩溃的堆栈跟踪。

E/AndroidRuntime( 2065): FATAL EXCEPTION: main
E/AndroidRuntime( 2065): Process: com.patron.main, PID: 2065
E/AndroidRuntime( 2065): java.lang.NoClassDefFoundError: android.support.v4.widget.DrawerLayout
E/AndroidRuntime( 2065):        at com.patron.main.FlashMenu.onCreate(FlashMenu.java:120)
E/AndroidRuntime( 2065):        at android.app.Activity.performCreate(Activity.java:5933)
E/AndroidRuntime( 2065):        at   android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
E/AndroidRuntime( 2065):        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
E/AndroidRuntime( 2065):        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
E/AndroidRuntime( 2065):        at android.app.ActivityThread.access$800(ActivityThread.java:144)
E/AndroidRuntime( 2065):        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
E/AndroidRuntime( 2065):        at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime( 2065):        at android.os.Looper.loop(Looper.java:135)
E/AndroidRuntime( 2065):        at android.app.ActivityThread.main(ActivityThread.java:5221)
E/AndroidRuntime( 2065):        at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime( 2065):        at java.lang.reflect.Method.invoke(Method.java:372)
E/AndroidRuntime( 2065):        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
E/AndroidRuntime( 2065):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
W/ActivityManager( 1228):   Force finishing activity com.patron.main/.FlashMenu

以下是我在POM.xml中包含依赖项的方法:

<dependency>
  <groupId>com.android.support</groupId>
  <artifactId>support-v4</artifactId>
  <version>21.0.3</version>
  <type>aar</type>
  <exclusions>
    <exclusion>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpclient</artifactId>
    </exclusion>
  </exclusions>
</dependency>

我正在使用google在android-sdk / extras / android / m2repository文件夹中提供的本地maven存储库,如另一个SO帖子所建议的那样。显然它可以编译并运行正常,所以我相信它正确找到它。当我调用mvn dependency:build-classpath来查看编译时类路径时,它显示了这个: Classpath

然后手动打开7zip中的AAR文件夹并检查类jar以确保DrawerLayout在那里,我可以肯定地看到它: DrawerLayout in Classpath

所以在这一点上,我不确定我可以改变或做什么来在运行时获得这个支持包。我详细介绍了类路径,并且我确信我没有两次导入support-v4包,只是一次,并且根据导入它两次的错误的性质判断我不认为我能够编译是问题。我尝试手动设置依赖项的范围进行编译(应该是正确的),然后运行并提供以防万一没有任何运气。如果有人对解决这个NoClassDefFoundError的问题有任何想法,那将是非常感激的。

1 个答案:

答案 0 :(得分:0)

想出来。后人: 您需要更新到最新版本的Android Maven插件,以避免此错误。另外,我通过更新到插件版本4.0.0-rc2修复了我在其他几个类中找不到ActivityCompat21的旧版本的bug,我修复了一个hacky变通方法。

<plugin>
    <groupId>com.jayway.maven.plugins.android.generation2</groupId>
    <artifactId>android-maven-plugin</artifactId>
    <version>4.0.0-rc.2</version>
    <extensions>true</extensions>
    <configuration>
        <includeLibsJarsFromAar>true</includeLibsJarsFromAar>
    </configuration>
</plugin>