2017-12-14 3 views
1

ich habe folgendes build.gradle Inhalt:Schatten Plugin in gradle funktioniert nicht - gradle bauen kein Fett jar nicht bauen

group 'com.example' 
version '1.0-SNAPSHOT' 

buildscript { 
    repositories { 
     mavenLocal() 
     mavenCentral() 
     jcenter() 
     maven { url "https://plugins.gradle.org/m2/" } 
    } 
    dependencies { 
     classpath "com.github.jengelman.gradle.plugins:shadow:2.0.1" 
    } 
} 


apply plugin: 'scala' 
apply plugin: "com.github.johnrengelman.shadow" 
sourceCompatibility = java_version 


repositories { 
    mavenCentral() 
} 

dependencies { 
    // my dependencies: 
    compile group: 'org.apache.spark', name: "spark-sql_$scala_major", version: spark_version 
    testCompile group: 'junit', name: 'junit', version: '4.12' 
} 

Das Problem ist, dass gradle build läuft kein Fett Glas schafft.

an den Anordnungsbeziehungen der Suche nach gradle tasks --all ausgeführt zeigt, dass die shadowJar Aufgabe vorhanden ist, aber die build Aufgabe ist nicht von ihm abhängig:

:tasks 

------------------------------------------------------------ 
All tasks runnable from root project 
------------------------------------------------------------ 

Build tasks 
----------- 
assemble - Assembles the outputs of this project. 
build - Assembles and tests this project. 
buildDependents - Assembles and tests this project and all projects that depend on it. 
buildNeeded - Assembles and tests this project and all projects it depends on. 
classes - Assembles main classes. 
clean - Deletes the build directory. 
jar - Assembles a jar archive containing the main classes. 
testClasses - Assembles test classes. 

Build Setup tasks 
----------------- 
init - Initializes a new Gradle build. 
wrapper - Generates Gradle wrapper files. 

Documentation tasks 
------------------- 
javadoc - Generates Javadoc API documentation for the main source code. 
scaladoc - Generates Scaladoc for the main source code. 

Help tasks 
---------- 
buildEnvironment - Displays all buildscript dependencies declared in root project 'scalaGradleHW'. 
components - Displays the components produced by root project 'scalaGradleHW'. [incubating] 
dependencies - Displays all dependencies declared in root project 'scalaGradleHW'. 
dependencyInsight - Displays the insight into a specific dependency in root project 'scalaGradleHW'. 
dependentComponents - Displays the dependent components of components in root project 'scalaGradleHW'. [incubating] 
help - Displays a help message. 
model - Displays the configuration model of root project 'scalaGradleHW'. [incubating] 
projects - Displays the sub-projects of root project 'scalaGradleHW'. 
properties - Displays the properties of root project 'scalaGradleHW'. 
tasks - Displays the tasks runnable from root project 'scalaGradleHW'. 

Shadow tasks 
------------ 
knows - Do you know who knows? 
shadowJar - Create a combined JAR of project and runtime dependencies 

Verification tasks 
------------------ 
check - Runs all checks. 
test - Runs the unit tests. 

Other tasks 
----------- 
compileJava - Compiles main Java source. 
compileScala - Compiles the main Scala source. 
compileTestJava - Compiles test Java source. 
compileTestScala - Compiles the test Scala source. 
processResources - Processes main resources. 
processTestResources - Processes test resources. 
+0

Mit der [Anwendung Plugin] (https://docs.gradle.org/current/userguide/application_plugin.html) 'gelten Plugin: 'Anwendung' ', wendet implizit das' Distribution plugin' an, das die folgende Abhängigkeitskette verursacht: 'build' ->' assembly' -> 'shadowDistTar' ->' shadowJar'. Auf diese Weise erzeugt das Anrufen von "Gradle Build" das FatJar, das ich erwartet habe –

Antwort

0

The 'build' task in Gradle is commonly mistaken für eine Aufgabe, die alle Aufgaben in einem Projekt aufbaut. Die ‚bauen‘ Aufgabe ist eigentlich durch die Java-Basis-Plugin zur Verfügung gestellt und umfasst folgende Aufgaben:

compileJava, processResources, classes, jar, assemble, compileTestJava, processTestResources, testClasses, test, and check 

Statt ‚gradle build‘ läuft ich die Verwendung von defaultsTasks empfehlen

`defaultTasks 'build', 'shadowJar'` 

diese Linie Einlochen in Ihrer build.gradle erlaubt Gradle, ohne Argumente aufgerufen zu werden, so dass sowohl build als auch shadowJar ausgeführt werden.

> gradle 

Ich bin nicht vertraut mit dem shadowJar Plugin, aber wenn es eine Aufgabe shadowJar namens aussetzt, könnte die Verwendung einer DependsOn Linie in build.gradle die defaultTasks Linie vereinfachen.

project.tasks.shadowJar.dependsOn build 

vereinfacht die defaultTasks Linie

defaultTasks shadowJar 
Verwandte Themen