【问题标题】:How to make dependency transitive in Gradle如何在 Gradle 中使依赖传递
【发布时间】:2015-06-16 15:46:47
【问题描述】:

我已经下载了 javax.mail-api-1.5.3.jar 文件复制到 app/libs 文件夹然后右键单击,添加为库。然后下一行出现在依赖项下

compile files('libs/javax.mail-api-1.5.3.jar')

我想让这个依赖传递。因为我在 pom.xml 文件中提到了 javax.mail-api 库依赖,如下所示。

 <dependencies>
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>javax.mail-api</artifactId>
            <version>1.5.3</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>javax.mail</artifactId>
            <version>1.5.3</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

我也试过

compile (files('libs/javax.mail-api-1.5.3.jar')){
    transitive true
}

那么就会出现这个错误。

    Error:(34, 0) Gradle DSL method not found: 'compile()'
    Possible causes:
The project 'MeetingManager' may be using a version of Gradle that does not contain the method.
    Open Gradle wrapper file 

The build file may be missing a Gradle plugin.
    Apply Gradle plugin

我不知道下一步该怎么做,请帮忙。

我的 build.Gradle 文件看起来像

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        applicationId "com.example.meetingmanager"
        minSdkVersion 16
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    packagingOptions{
        exclude 'META-INF/LICENSE.txt'
    }


}

dependencies {
    compile 'com.android.support:appcompat-v7:22.1.1'
    compile 'com.google.android.gms:play-services:7.3.0'
    compile 'com.google.api-client:google-api-client:1.20.0'
    compile 'com.google.apis:google-api-services-gmail:v1-rev29-1.20.0'
    compile 'com.google.api-client:google-api-client-android:1.20.0'
    compile 'com.google.api-client:google-api-client-gson:1.20.0'
    compile (files('libs/javax.mail-api-1.5.3.jar')){
        transitive true
    }

}

【问题讨论】:

  • 对于那些仍然面临这个问题的人。不要使用 javax.mail-api-1.5.3.jar。去这个link,把三个jar都下载下来,放到lib文件夹下,在dependencies中添加lib文件夹。

标签: maven jakarta-mail android-gradle-plugin build.gradle gmail-api


【解决方案1】:

javax.mail-api-1.5.3 也可以从构建文件中描述的现有存储库(可能是 jCenter 或 mavenCentral)下载。如果您不习惯在 /libs 中使用您下载的版本,您可以在构建文件中执行此操作:

dependency {
  compile 'javax.mail:javax.mail-api:1.5.3'
}

这种情况下的默认行为是在您这样指定时下载传递依赖项。

这是对该存储库的引用:http://mvnrepository.com/artifact/javax.mail/javax.mail-api/1.5.3

【讨论】:

  • 我已经试过了。 Gradle 编译成功,但是当我运行我的应用程序并尝试发送消息时,会发生以下错误。 java.lang.NoClassDefFoundError:com.sun.mail.util.MailLogger。所以我寻找解决方案,我找到了这个。 crunchify.com/java-mailapi-example-send-an-email-via-gmail-smtp。它说你想编辑 pom.xml 文件,这就是为什么我下载了 .jar 文件并编辑它的 pom.xml 文件并想将它添加到 gradle 中。
  • 首先,我认为您似乎误解了该帖子的重点。他们告诉您将这些依赖项添加到项目的 pom 中(在这种情况下,它将是一个 Android 项目,而不是您构建的 jar)。但是由于您使用的是 gradle,只需将这些依赖项添加到您的 gradle 构建文件中。只需自己添加额外的依赖即可compile 'javax.mail:mail:1.4.7'
  • 另外,如果您只希望它们在测试范围内(这是 pom.xml 指定的),请使用 testCompile 而不是 compile
  • 是的,你是对的,我误解了。现在我在我的 gradle 构建文件中添加了这两个依赖项。现在我得到这个错误UNEXPECTED TOP-LEVEL EXCEPTION:com.android.dex.DexException: Multiple dex files define Ljavax/mail/Folder;任何想法为什么我得到这个..??我该如何解决它?
  • 您可能想为此发布一个新问题并提供更多详细信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-15
  • 2021-01-04
  • 1970-01-01
  • 1970-01-01
  • 2021-07-26
  • 2023-03-17
  • 2013-07-22
相关资源
最近更新 更多