【问题标题】:Android Gradle Build System: Create Jar Not LibraryAndroid Gradle 构建系统:创建 Jar 而非库
【发布时间】:2013-06-17 14:01:52
【问题描述】:

目前我在 Eclipse 中工作。我想迁移到 Android Studio,但我需要先弄清楚这一点:如何使用新的 android 构建系统为我的项目创建 jar?

我的项目设置为库,但项目中只有 java 文件。我不需要或不想将其导出为库。我想将文件导出为 .jar,以便将其轻松放入另一个项目中。

更新 这是我的 gradle 文件。 我无法添加行 apply plugin java 因为它与 android 插件不兼容。 jar 任务已经包含在 android 插件中。

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.4'
    }
}
apply plugin: 'android'

dependencies {
    compile files('libs/android-support-v4.jar')
}

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 16
    }
}

sourceSets {
    main  {
        java {
            srcDir 'src/main/java'
        }
    }
}
task jar(type: Jar) {
    from sourceSets.main.java
}

我将脚本运行为: gradle clean jar

当我运行任务时,什么也没有发生……为什么?我错过了什么?

更新 2

以下是我正在使用的新 gradle 构建文件。请注意由于 android studio 的最新更新导致的 gradle 版本更改。即使是简单的clean build,我也会收到此错误:Project directory '<my_workspace_path>\Core2Project\build.gradle' is not a directory. 此错误仅发生在构建工作室中。不是当我从 IDE 运行时。我在另一个项目中也遇到了同样的问题。当我指定要在构建工作室中使用的文件名时,我会收到此错误。

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

dependencies {
    compile files('libs/android-support-v4.jar')
}

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 16
    }

    sourceSets {
        main  {
            java {
                srcDir 'src/main/java'
            }
        }
    }
}


task jar(type: Jar) {
    from android.sourceSets.main.java
}

【问题讨论】:

    标签: jar gradle android-studio


    【解决方案1】:

    使用较新版本的 gradle 和 android gradle 插件,您只需将以下内容添加到您的 build.gradle

    task jar(type: Jar) {
        from android.sourceSets.main.java.srcDirs
    }
    

    然后运行gradle clean compileReleaseJava jar

    在旧版本的 gradle 插件上,您的 sourceSets 元素需要在 android 内:

    android {
        compileSdkVersion 17
        buildToolsVersion "17.0.0"
    
        defaultConfig {
            minSdkVersion 7
            targetSdkVersion 16
        }
    
        sourceSets {
            main  {
                java {
                    srcDir 'src/main/java'
                }
            }
        }
    }
    

    那么,您的jar 任务需要引用android.sourceSets

    task jar(type: Jar) {
        from android.sourceSets.main.java
    }
    

    【讨论】:

    • 我想说你是对的,但我不能再构建我的项目了。只是一个简单的“干净的构建”给了我一个错误。错误路径中的build.gradle 文件是我为了运行任务而指向的文件。这里没有变化。 Project directory '<my_workspace_path>\Core2Project\build.gradle' is not a directory.
    • 您使用的是最新的 gradle 插件版本吗?你现在应该在classpath 'com.android.tools.build:gradle:0.5.+'
    • 是的,我实际上刚刚创建了一个新项目并复制了我的 src 目录,以及 gradle 中的 androidjar 位。我的构建脚本位于模块的 gradle 文件中,而不是项目的 gradle 文件中
    • 使用最新的 Gradle 插件,我不得不将 Jar 任务主体从部分更改为:from fileTree(dir: 'build/intermediates/classes/release') 我也运行 gradle clean compileReleaseJava jar
    • 最近:来自android.sourceSets.main.java.srcDirs
    【解决方案2】:

    您在这里所说的“jar”任务是由 java 插件引入的。你可以通过使用来应用 gradle java 插件

    apply plugin:'java'
    

    请查看http://www.gradle.org/docs/current/userguide/tutorial_java_projects.html#N103C6 的 gradle 用户指南中有关 java 插件的章节,以获取有关 java 插件的更多信息。

    干杯,

    雷内

    【讨论】:

    • 这很令人惊讶,因为 java 库确实添加了一个 jar 任务。你能提供完整的rootproject构建文件吗? “使用” jar 任务是什么意思?从命令行注入它?
    • 抱歉耽搁了,我已经用构建脚本更新了我的问题
    • 运行“gradle clean jar”时“什么都没有发生”是什么意思是任务执行并标记为最新的吗? build/libs 中没有创建 jar 文件吗?我在您的构建脚本中注意到的一件事是您的主要 java 源目录的配置。这是我认为的默认设置,因此无需进行配置。此外,您的 sn-p 只是将另一个目录添加到默认目录。
    • Java 插件无法针对导入的 android 类正确编译。
    猜你喜欢
    • 2012-11-27
    • 2013-08-22
    • 2012-02-24
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    相关资源
    最近更新 更多