当前位置: 首页 > 面试题库 >

Gradle:如何在Android构建中包含来自相关Java项目的本地jar?

骆文彬
2023-03-14
问题内容

在我的Android应用程序中,java.lang.NoClassDefFoundError当执行引用从属.jar中的代码的代码时,出现提示。我的项目包括一个Android模块以及一个仅Java库模块,这是jar依赖项所在的位置。我正在使用gradle
1.10构建项目。这是我的项目布局:

myProject
- app (Android)
  - src
  - build.gradle

- lib (java)
  - src     
  - libs
    - local-dependency.jar
  - build.gradle

- build.gradle
- settings.gradle

主项目build.gradle为空白,而主项目settings.gradle如下所示:

include ':app', ':lib'

Android应用build.gradle看起来像:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.8.+'
    }
}

apply plugin: 'android'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 18
    buildToolsVersion "19.0.2"

    defaultConfig {
        minSdkVersion 18
        targetSdkVersion 18
        versionCode 1
        versionName "1.0"
    }
}

dependencies {
    compile project(':lib')
}

该库build.gradle是:

apply plugin: 'java'

repositories {
    mavenCentral()
}

dependencies {
    compile <some-dependency-in-maven>
    compile files('libs/local-dependency.jar') 
}

一切都编译和打包,没有错误,并且我在IDE(IntelliJ 13)中看不到任何错误。由于某些原因,我local- dependency.jar在Android编译过程中没有加入到处理过程中。lib项目中指定的任何Maven依赖项都可以添加到Android
.apk中;这只是我的本地jar依赖项。有什么我想念的吗?

谢谢!


问题答案:

这不是直接可能的,因为在Gradle中未将本地jar声明为可传递依赖项。

您有两种选择:

  • 将两个jar合并到您的java库中,以便输出包含本地jar。
  • 创建一个没有源,只有jar的其他项目,并使该项目依赖于此。

第二个选项使您能够直接依靠本地jar进行多个项目(最重要的是成为传递依赖项)。为此,创建一个新的gradle项目,然后将其放入build.gradle以下内容:

configurations.create("default")
artifacts.add("default", file('somelib.jar'))

只需将您的jar注册为该项目发布的默认工件,其他项目就会使用它。



 类似资料:
  • 我想在构建时将salesforce的Enterprise.jar文件包含在我的项目中,使用gradle,有没有人可以帮助我在项目中包含src/main/resources文件夹中存在的本地jar文件。

  • 我的项目中有以下设置... 用于SOA风格项目的多项目gradle构建,使用Rabbitmq和Spring集成连接在一起。 包含许多grails项目以及表示服务的普通java/groovy项目。 每个服务项目旁边都有一个项目(jar),其中包含可以使用Spring集成代理的服务的所有公共接口(和消息)。 这些项目使用gradle依赖关系相互关联,然后我使用gradle想法插件生成IntelliJ项

  • 我目前正在考虑将一个我开始用react-native开发的应用移植到CodenameOne。为此,我仍然在检查它的可行性和工作量(因为我必须将一些本机库绑定从react-native移植或开发到codenameone,因为codenameone忽略了我的一些需求,比如Socket.io支持)。免费的codenameone构建云服务仅限于1MB的应用程序,我必须在本地进行测试构建(只有几个测试类和使

  • 我的桌面上有一个.jar文件,我希望将它添加为项目的依赖项,以便在其上使用现有的方法。我该怎么做?

  • 问题内容: 我想在构建时使用gradle在我的项目中包含salesforce的enterprise.jar文件。有人可以帮助我如何在项目的src / main / resources文件夹中包含一个本地jar文件。 问题答案: 文档中对此进行了说明。应该执行以下操作: 我不会把罐子放进去。它不是项目的资源,而是编译依赖项。我会将其放在lib目录中。

  • 我有一个多项目的设置,在这里我想从某些子项目构建Rpm文件,包含其他子项目的人工制品。看来我需要一些基本的基础知识。 项目布局如下: 这两个服务都依赖于CommonLibs。 我使用的是Nebula.os-Package 2.0.2和Gradle2.2快照版本。 null 所以,我想我应该在serviceA和ServiceB的中做这样的事情: 显然,这是行不通的: 好的,serviceA不是一个J