Reputation: 1665
I want to generate a single Jar with multiple modules and dependencies. I installed FatJar Plugin
but I got the below error:
My Code:
Trying shadowJar
Error:(61, 0) Could not find method shadowJar() for arguments [build_eqgfg4x39smehqcteaccdy4k6$_run_closure4@780b32c6] on project ':SDKFramework' of type org.gradle.api.Project. Open File
My build.gradle (module)
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 {
}
Upvotes: 3
Views: 12034
Reputation: 1032
You should add the following line to your build.gradle:
apply plugin: 'java'
Because, gradle don't have "Jar" task by default. You can read about that, here https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Jar.html
If you using android, then add here:
apply plugin: 'android'
or
apply plugin: 'com.android.library'
Upvotes: 0
Reputation: 3096
Very simple solution is to use the shadow plugin.
Using the plugin is very straightforward:
plugins {
id "com.github.johnrengelman.shadow" version "1.2.3"
}
apply plugin: 'java'
or
apply plugin: 'groovy'
This plugin also enable you to exclude dependencies, redirect (rename) packages' names and much more.
Upvotes: 2
Reputation: 1665
Well, I found solution:
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')
}
This code generate a single jar with all classes.
Upvotes: 0