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

时间:2016-06-14 09:06:34

标签: java gradle jar

我想生成一个包含多个模块和依赖项的Jar。我安装了FatJar Plugin,但我收到了以下错误:

enter image description here

我的代码:

enter image description here

尝试shadowJar

  

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

我的build.gradle(模块)

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 {

}

3 个答案:

答案 0 :(得分:2)

非常简单的解决方案是使用shadow plugin 使用插件非常简单:

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

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

    1. 应用 java groovy 插件。
    2.   

      申请插件:' java'

        

      申请插件:' groovy'

      1. 刷新项目并运行新的' shadowJar'任务。
      2. 此插件还允许您排除依赖项,重定向(重命名)包'名字等等。

答案 1 :(得分:0)

您应该将以下行添加到 build.gradle

apply plugin: 'java'

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

如果您使用的是Android,请在此处添加:

apply plugin: 'android'

apply plugin: 'com.android.library'

答案 2 :(得分:0)

好吧,我找到了解决方案:

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。