首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用FatJar (Gradle)创建单个jar

如何使用FatJar (Gradle)创建单个jar
EN

Stack Overflow用户
提问于 2016-06-14 09:06:33
回答 3查看 11.7K关注 0票数 3

我想要生成一个具有多个模块和依赖项的单个Jar。我安装了FatJar Plugin,但得到了以下错误:

我的代码:

尝试shadowJar

错误:(61,0)无法为项目':SDKFramework‘的参数build_eqgfg4x39smehqcteaccdy4k6$_run_closure4@780b32c6找到org.gradle.api.Project类型的方法shadowJar()。打开文件

My build.gradle (模块)

代码语言:javascript
复制
apply plugin: 'com.github.johnrengelman.shadow'
apply plugin: 'com.android.library'
apply plugin: 'groovyx.grooid.groovy-android'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        minSdkVersion 9
        targetSdkVersion 19
        versionCode 1
        versionName "0.1.1"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    lintOptions {
        abortOnError false
    }
}

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.0'
        classpath 'org.codehaus.groovy:gradle-groovy-android-plugin:0.3.10'
        classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.3'
    }
}

dependencies {
    compile 'com.android.support:appcompat-v7:22.2.0'
    compile project(':framework2')
    compile 'com.google.code.gson:gson:2.6.1'
    compile 'junit:junit:4.12'
}

shadowJar {

}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-14 14:18:41

我找到了解决方案:

代码语言:javascript
复制
task createJar(type: Jar) {
    from {
        List<File> allFiles = new ArrayList<>();
        configurations.compile.collect {
            for (File f : zipTree(it).getFiles()) {
                if (f.getName().equals("classes.jar")) {
                    allFiles.addAll(zipTree(f).getAt("asFileTrees").get(0).getDir())
                }
            }
        }
        allFiles.add(new File('build/intermediates/classes/release'))
        allFiles // To return the result inside a lambda
    }
    archiveName('MySDK.jar')
}

--这个代码生成一个包含所有类的jar。

票数 0
EN

Stack Overflow用户

发布于 2016-06-14 17:40:02

非常简单的解决方案是使用影子插件

使用插件非常简单:

  1. 将插件声明为build.grade中的第一个语句:

插件{ id "com.github.johnrengelman.shadow“版本"1.2.3” }

  1. 应用javagroovy插件。

应用插件:'java‘

应用插件:“groovy”

  1. 刷新项目并运行新的“shadowJar”任务。

这个插件还使您能够排除依赖项、重定向(重命名)包的名称等等。

票数 2
EN

Stack Overflow用户

发布于 2016-06-14 10:01:12

应该在build.gradle中添加以下行

代码语言:javascript
复制
apply plugin: 'java'

因为在默认情况下,gradle没有"Jar“任务。你可以在这里读到,https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Jar.html

如果您使用android,那么在这里添加:

代码语言:javascript
复制
apply plugin: 'android'

代码语言:javascript
复制
apply plugin: 'com.android.library'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37807562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档