Giter Club home page Giter Club logo

shadow's Introduction

Gradle Shadow

Gradle plugin for creating fat/uber JARs with support for package relocation.

Documentation

Read the User Guide!

Current Status

Download Circle CI

Latest Test Compatibility

Gradle Version Shadow Version
5.x 5.2.0 - 6.0.0
6.x 5.2.0 - 6.1.0
7.x 7.0.0+
8.x 8.0.0+

NOTE: Shadow v5.+ is compatible with Gradle 5.x - 6.x and Java 7 - 15 only, v6.1.0+ requires Java 8+.

shadow's People

Contributors

3flex avatar armaxis avatar baron1405 avatar brandonkearby avatar cdagaming avatar elisamin avatar eskatos avatar felipecsl avatar goooler avatar helfper avatar jeffalder avatar jlleitschuh avatar johnrengelman avatar jszakmeister avatar jt122406 avatar krolik-exe avatar m8nmueller avatar macil avatar mark-vieira avatar matthurne avatar niko-dunixi avatar osipxd avatar renovate[bot] avatar roxchkplusony avatar rpalcolea avatar siordache avatar thexxturboxx avatar toffikk avatar vyazelenko avatar wolfs avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

shadow's Issues

Override default sourceSets.main.output inclusion behavior

On the project I am working on, we have many restassured tests that we like to package and run standalone against our artifacts during CI. We intentionally do not use any of our production objects in these tests to ensure that the contract does not unintentionally change. Using your plugin to package our tests was a breeze but there does not seem to be a way to disable the default "from(sourceSets.main.output)" done by the plugin. I know we could use exclusion patterns but that seems a little backwards.

Is there any way to disable/undo the default inclusion behavior? If not, would you be opposed if we added an option to do so?

Thanks.

How to implement transformers

See this from the doc
shadow { transformer(TransformerClass) { <configuration> } }

But uncertain which transformer classes to use (and which one I can choose from.

For example have these in an other project built with Maven and the shade plugin there, how can I do the same with your plugin?

   <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
      <resource>META-INF/spring.handlers</resource>
   </transformer>
   <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                            <resource>META-INF/spring.schemas</resource>
   </transformer>        
</transformers>```

Publish to maven

Hi, can I use this plugin in publish task? I use this plugin in my script. I use maven plugin for publication. Unfortunately published artifacts to maven are not shadowed.

Relocation deletes resources from included (project?) dependencies.

I want to include a subproject dependency (Core) in the shadow JAR of another subproject (App). The Core project just contains some classes used in the App project and a plain text file named TEST with some example text in it. The resulting Core JAR includes the original compiled classes and the TEST file correctly.
Now if I include the Core dependency in the App project without any relocation it copies the classes and resources correctly to the resulting shadow JAR, but if I relocate the core package to a package within the app package then the resources of the Core project are not included in the resulting JAR file (the TEST file is missing).

I don't know exactly how to explain the complete project structure so it's probably better if you take a look at the test project yourself: https://github.com/Minecrell/GradleTest

So basicly when I use relocation then the resources of the project dependency are not copied to the resulting JAR.

The artifactAttached property does not have any effect

From the documentation, when setting the artifactAttached property to false, I simply expect the original (unshadowed) artifact to be replaced and the destinationDir property to be ignored. However, this does not occure. Instead, I experience an IOException after setting destinationDir to libsDir.

I assume this is because I am using Microsoft Windows and the unshaded file is still read from when the shaded file is assembled. I solved this by making a defensive copy but I guess it should be fixed. Furthermore, I find it confusing that the default destination directory is not libsDir as specified in the documentation.

def temporaryDir = "${libsDir}${File.separator}nodep"

shadow {
    relocation {
        pattern = 'org.objectweb.asm'
        shadedPattern = 'my.project.asm'
    }
    destinationDir temporaryDir
    // artifactAttached false
}

shadowJar.doLast {
    logger.info("Moving shadowed jars from ${temporaryDir} into ${libsDir}")
    def origin = new File(temporaryDir)
    origin.listFiles().each {
        def targetFile = new File(libsDir, it.name)
        if ((!targetFile.exists() || !targetFile.delete()) || !it.renameTo(targetFile)) {
            throw new StopActionException("Could not move shadowed ${it}")
        }
    }
    if (!origin.delete()) {
        throw new StopActionException("Could not delete temporary ${origin}");
    }
}

Creating a source jar reflecting the "uber jar"

Is it possible to use the Shadow plugin to create a source code and maybe even a javadoc jar that reflects the state after "merging"?

I need to import ASM in my project, i.e. the original packaging cannot be used for anything since this would violate compatibility. However, if someone added a dependency to my project, they could not navigate the dependency or read any documentation since the uber jar does not come with such information.

If this is not yet possible, is it consider to implement such functionality? I really need it and I want to move a first release to Maven Central soon, so I would be more than greatful. Great plugin, by the way, even without that feature!

transformer fails with "Could not find property"

probably a newbee question:

the build file:

build.gradle:

buildscript {
    repositories {
        maven {
            name 'Gradle Shadow'
            url 'http://dl.bintray.com/content/johnrengelman/gradle-plugins'
        }
    }
    dependencies {
        classpath 'org.gradle.plugins:shadow:0.7.4'
    }
}

apply plugin: 'shadow'

dependencies {
  compile project(':cdm')
  compile project(':grib')
  compile project(':tdcommon')
  compile 'log4j:log4j:1.2.17'
  runtime 'org.slf4j:slf4j-log4j12:1.7.5'
  compile ('org.springframework:spring-core:3.1.1.RELEASE')
  compile ('org.springframework:spring-context:3.1.1.RELEASE')
  compile ('org.springframework:spring-beans:3.1.1.RELEASE')
}


ext {
  tdmJar = 'tdm-'+version+'.jar'
}

shadow {
   transformer(org.gradle.api.plugins.shadow.transformers.AppendingTransfomer) {
      resource = 'META-INF/spring.handlers'
   }
   transformer(org.gradle.api.plugins.shadow.transformers.AppendingTransfomer) {
      resource = 'META-INF/spring.schemas'
   }
}

the output:

$ gradle clean shadow -x test -p tdm
The TaskContainer.add() method has been deprecated and is scheduled to be removed in Gradle 2.0. Please use the create() method instead.

FAILURE: Build failed with an exception.

  • Where:
    Build file 'C:\dev\github\thredds\tdm\build.gradle' line: 32

  • What went wrong:
    A problem occurred evaluating project ':tdm'.

    Could not find property 'org' on org.gradle.api.plugins.shadow.ShadowTaskExtension_Decorated@59f0780c.

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 9.52 secs

caron@ROBERTO /c/dev/github/thredds (target-4.4.0)
$ which gradle
/c/dev/gradle-1.6/bin/gradle

caron@ROBERTO /c/dev/github/thredds (target-4.4.0)

How to use shadow jar as main project artifact?

Hi

I am not sure how I would declare the shaded jar as my main output artifact so that other projects (using dependency compile project(":shaded")) use this jar rather than the normal jar.

I saw that
"Automatically configure Shadow output as publish artifact"

is on the road map, however, I was wondering whether there is something that I can do manually right now to get this to work?

Exclude sub project from shadow build. Readme.

So - its more of a question rather then issue. How to exclude project from shadow build? In fatjar you can do this:

compile project(':project-name'), {
    ext {
        fatJarExclude = true
    }
}

But, from README I am not sure about, how to do this in shadow...

Relocation moves classes to new package, but keeps old package in the JAR.

When I relocate the guava package in my test project to another package, it moves the classes correctly but if I look into the JAR the folder of the original package still exists.

relocate 'com.google.common', 'net.minecrell.gradletest.com.google.common'

Guava has been moved to the correct package but there is still the com folder with all of the sub directories as well.

Enhancements to filtering configuration

Spawned from #21

The current include/exclude filtering is very frail. Complex filtering scenarios that require specific includes/excludes with global includes/excludes are not possible.

Need to create a design doc with various scenarios, implement tests to match.

Task dependsOn fails

get this message

Converting class org.gradle.api.plugins.shadow.ShadowTaskExtension_Decorated to a task dependency using toString() has been deprecated and is scheduled to be removed in Gradle 2.0. Please use org.gradle.api.Task, java.lang.String, org.gradle.api.Buildable, org.gradle.tasks.TaskDependency or a Closure to declare your task dependencies.

and then the build craps out with

What went wrong:
Could not determine the dependencies of task

when attempting to depend on shadow using

task someTask( dependsOn: shadow )

this works fine

task someTask( dependsOn: "shadow" )

Package relocation doesn't relocate references in project source. Results in NoClassDefFound.

Hi,
I'm having issue, with running your shadowJar plugin, more precisely when using "relocate" feature of it.
I'm trying to relocate all google libraries that I use( especially guava classes), to embed them in my jar and be independent of guava that is used in the platform I want to launch my jar in (it's Apache Storm, my jar is a Storm topology).

To achieve this I specify shadowJar task as following:

shadowJar {
     zip64 = true
    exclude 'META-INF/*.RSA', 'META-INF/*.SF', 'META-INF/*.DSA'
    relocate 'com.google', 'mycompany.com.google'
}

I hope I'm right, that that should be it, i.e. all my classes in my jar, that used com.google.* classes, are now "rewritten" to use mycompany.com.google.* classes.
But I have a problem to run the shadow jar:

$ java -cp myjar-1.0-all.jar mycompany.MyMainClass
...
Exception in thread "main" java.lang.NoClassDefFoundError: com/google/inject/PrivateModule
...

When I unpacked the jar, I see that indeed all com.google classes landed in mycompany/com/google directory. There are empty directories in com/google, but I believe this is not the issue.
Do you know what is the issue? I'll be really grateful for your help as it is a major blocker to my project.

Environment:

  • Shadow version : 0.9.0-M5

  • JVM: 1.8.0_05 (Oracle Corporation 25.5-b02)

  • Gradle: 1.12-20140531062749+0000
    to have Shadow working with JVM 1.8, I had to asm to 5.x, I did this by overriding asm dependencies in buildscript:

    classpath 'org.ow2.asm:asm:5.0.3'
    classpath 'org.ow2.asm:asm-commons:5.0.3'

1.0.1

Critical bug fixes for 1.0.0 release

Adding/removing dependencies dynamically (e.g with shadowJar.dependsOn task)

I'd like to add dependencies to the project when executing the shadowJar task.

I've got a configuration:
configurations { embeddedJetty }

and dependencies to it:

dependencies{
...
embeddedJetty 'org.eclipse.jetty:jetty-servlet:+'
embeddedJetty 'org.eclipse.jetty:jetty-webapp:+'
embeddedJetty 'org.eclipse.jetty:jetty-jsp:+'
embeddedJetty 'org.eclipse.jetty:jetty-annotations:+'
}

Then I've created a task:

task embeddedJettyDep << {
dependencies{ compile configurations.embeddedJetty }
}
shadowJar.dependsOn embeddedJettyDep

The problem is that the jetty libs WON'T be included in the ShadowJar process in that way.
but if I put the dependencies{ compile configurations.embeddedJetty } simply in the buildfile (without a task) it will be included in the dist jar.

I think it should work when it's in a task too.

Manifest is not created in resulting JAR.

I have applied the application plugin to my build script and set the mainClassName correctly, however as of version 1.0.0 the manifest is not created at all. So there is only an empty META-INF folder in the resulting JAR file.
Also, if I try to run the generated JAR it tells me the following:

Error: Invalid or corrupt jarfile GradleTest-1.0-all.jar

I don't know if this is caused by the missing manifest or something else. Maybe I just configured the plugin wrong?
https://github.com/Minecrell/GradleTest

can't import gradle project into eclipse if build.gradle includes shadow

Not sure if anyone else has seen this, but if I comment out shadow and any references to it, Eclipse can import it w/o problems.

I did tell it to do a "cleanEclipse eclipse" before doing the import so it's not a weird dependency issue.

I'm using org.gradle.plugins:shadow:0.7.4

eclipse.buildId=4.3.0.I20130605-2000
java.version=1.7.0_25
java.vendor=Oracle Corporation
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US
Framework arguments: -product org.eclipse.epp.package.jee.product
Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product

Error
Thu Sep 05 21:43:01 EDT 2013
Could not find method create() for arguments [knows, class org.gradle.api.plugins.shadow.tasks.KnowsTask] on task set.

java.lang.reflect.InvocationTargetException
at org.springsource.ide.eclipse.gradle.core.util.GradleRunnable.run(GradleRunnable.java:92)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)
Caused by: org.eclipse.core.runtime.CoreException: Could not find method create() for arguments [knows, class org.gradle.api.plugins.shadow.tasks.KnowsTask] on task set.
at org.springsource.ide.eclipse.gradle.core.GradleModelProvider$GroupedModelProvider.ensureModels(GradleModelProvider.java:284)
at org.springsource.ide.eclipse.gradle.core.GradleProject.getGradleModel(GradleProject.java:620)
at org.springsource.ide.eclipse.gradle.core.GradleProject.getSkeletalGradleModel(GradleProject.java:641)
at org.springsource.ide.eclipse.gradle.ui.wizards.GradleImportWizardPageOne$11.doit(GradleImportWizardPageOne.java:514)
at org.springsource.ide.eclipse.gradle.core.util.GradleRunnable.run(GradleRunnable.java:84)
... 1 more
Caused by: org.gradle.tooling.BuildException: Could not fetch model of type 'HierarchicalEclipseProject' using Gradle distribution 'http://services.gradle.org/distributions/gradle-1.5-bin.zip'.
at org.gradle.tooling.internal.consumer.ResultHandlerAdapter.onFailure(ResultHandlerAdapter.java:53)
at org.gradle.tooling.internal.consumer.async.DefaultAsyncConnection$2.run(DefaultAsyncConnection.java:71)
at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:66)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: org.gradle.api.internal.LocationAwareException: Build file 'F:\work\Eclipse.workspace\DropwizardOpenID\build.gradle' line: 3
A problem occurred evaluating root project 'DropwizardOpenID'.
at org.gradle.initialization.DefaultExceptionAnalyser.transform(DefaultExceptionAnalyser.java:85)
at org.gradle.initialization.MultipleBuildFailuresExceptionAnalyser.transform(MultipleBuildFailuresExceptionAnalyser.java:47)
at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:115)
at org.gradle.initialization.DefaultGradleLauncher.getBuildAnalysis(DefaultGradleLauncher.java:92)
at org.gradle.tooling.internal.provider.BuildModelAction.run(BuildModelAction.java:73)
at org.gradle.tooling.internal.provider.DelegatingBuildModelAction.run(DelegatingBuildModelAction.java:44)
at org.gradle.tooling.internal.provider.ConfiguringBuildAction.run(ConfiguringBuildAction.java:103)
at org.gradle.launcher.exec.InProcessGradleLauncherActionExecuter.execute(InProcessGradleLauncherActionExecuter.java:39)
at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:45)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:42)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:24)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.StartStopIfBuildAndStop.execute(StartStopIfBuildAndStop.java:33)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.ReturnResult.execute(ReturnResult.java:34)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:70)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:68)
at org.gradle.util.Swapper.swap(Swapper.java:38)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:68)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:60)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:59)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:45)
at org.gradle.launcher.daemon.server.DaemonStateCoordinator.runCommand(DaemonStateCoordinator.java:186)
at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy.doBuild(StartBuildOrRespondWithBusy.java:49)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.HandleStop.execute(HandleStop.java:36)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.CatchAndForwardDaemonFailure.execute(CatchAndForwardDaemonFailure.java:32)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.DefaultDaemonCommandExecuter.executeCommand(DefaultDaemonCommandExecuter.java:48)
at org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.handleCommand(DefaultIncomingConnectionHandler.java:155)
at org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.receiveAndHandleCommand(DefaultIncomingConnectionHandler.java:128)
at org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.run(DefaultIncomingConnectionHandler.java:116)
... 4 more
Caused by: org.gradle.api.GradleScriptException: A problem occurred evaluating root project 'DropwizardOpenID'.
at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:54)
at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:127)
at org.gradle.configuration.BuildScriptProcessor.evaluate(BuildScriptProcessor.java:38)
at org.gradle.configuration.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:44)
at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:464)
at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:77)
at org.gradle.configuration.DefaultBuildConfigurer$ConfigureProject.execute(DefaultBuildConfigurer.java:38)
at org.gradle.configuration.DefaultBuildConfigurer$ConfigureProject.execute(DefaultBuildConfigurer.java:36)
at org.gradle.api.internal.project.AbstractProject.configure(AbstractProject.java:440)
at org.gradle.api.internal.project.AbstractProject.allprojects(AbstractProject.java:435)
at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:32)
at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:142)
at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:113)
at org.gradle.initialization.DefaultGradleLauncher.getBuildAnalysis(DefaultGradleLauncher.java:92)
at org.gradle.tooling.internal.provider.BuildModelAction.run(BuildModelAction.java:73)
at org.gradle.tooling.internal.provider.DelegatingBuildModelAction.run(DelegatingBuildModelAction.java:44)
at org.gradle.tooling.internal.provider.ConfiguringBuildAction.run(ConfiguringBuildAction.java:103)
at org.gradle.launcher.exec.InProcessGradleLauncherActionExecuter.execute(InProcessGradleLauncherActionExecuter.java:39)
at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:45)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:42)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:24)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.StartStopIfBuildAndStop.execute(StartStopIfBuildAndStop.java:33)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.ReturnResult.execute(ReturnResult.java:34)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:70)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:68)
at org.gradle.util.Swapper.swap(Swapper.java:38)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:68)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:60)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:59)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:45)
at org.gradle.launcher.daemon.server.DaemonStateCoordinator.runCommand(DaemonStateCoordinator.java:186)
at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy.doBuild(StartBuildOrRespondWithBusy.java:49)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.HandleStop.execute(HandleStop.java:36)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.CatchAndForwardDaemonFailure.execute(CatchAndForwardDaemonFailure.java:32)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.DefaultDaemonCommandExecuter.executeCommand(DefaultDaemonCommandExecuter.java:48)
at org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.handleCommand(DefaultIncomingConnectionHandler.java:155)
at org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.receiveAndHandleCommand(DefaultIncomingConnectionHandler.java:128)
at org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.run(DefaultIncomingConnectionHandler.java:116)
at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:66)
Caused by: org.gradle.api.internal.MissingMethodException: Could not find method create() for arguments [knows, class org.gradle.api.plugins.shadow.tasks.KnowsTask] on task set.
at org.gradle.api.internal.AbstractDynamicObject.methodMissingException(AbstractDynamicObject.java:68)
at org.gradle.api.internal.AbstractDynamicObject.invokeMethod(AbstractDynamicObject.java:56)
at org.gradle.api.internal.CompositeDynamicObject.invokeMethod(CompositeDynamicObject.java:172)
at org.gradle.api.internal.tasks.DefaultTaskContainer_Decorated.invokeMethod(Unknown Source)
at org.gradle.api.plugins.shadow.ShadowPlugin.addShadow(ShadowPlugin.groovy:31)
at org.gradle.api.plugins.shadow.ShadowPlugin$addShadow.callCurrent(Unknown Source)
at org.gradle.api.plugins.shadow.ShadowPlugin.apply(ShadowPlugin.groovy:18)
at org.gradle.api.plugins.shadow.ShadowPlugin.apply(ShadowPlugin.groovy)
at org.gradle.api.internal.plugins.DefaultProjectsPluginContainer.providePlugin(DefaultProjectsPluginContainer.java:107)
at org.gradle.api.internal.plugins.DefaultProjectsPluginContainer.addPluginInternal(DefaultProjectsPluginContainer.java:71)
at org.gradle.api.internal.plugins.DefaultProjectsPluginContainer.apply(DefaultProjectsPluginContainer.java:37)
at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.applyPlugin(DefaultObjectConfigurationAction.java:101)
at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.access$200(DefaultObjectConfigurationAction.java:32)
at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction$3.run(DefaultObjectConfigurationAction.java:72)
at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.execute(DefaultObjectConfigurationAction.java:114)
at org.gradle.api.internal.project.AbstractProject.apply(AbstractProject.java:846)
at org.gradle.api.Project$apply.call(Unknown Source)
at org.gradle.api.internal.project.ProjectScript.apply(ProjectScript.groovy:34)
at org.gradle.api.Script$apply.callCurrent(Unknown Source)
at build_36u64arlp1515e95jca9gg3h4i.run(F:\work\Eclipse.workspace\DropwizardOpenID\build.gradle:3)
at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:52)
... 53 more
Root exception:
org.eclipse.core.runtime.CoreException: Could not find method create() for arguments [knows, class org.gradle.api.plugins.shadow.tasks.KnowsTask] on task set.
at org.springsource.ide.eclipse.gradle.core.GradleModelProvider$GroupedModelProvider.ensureModels(GradleModelProvider.java:284)
at org.springsource.ide.eclipse.gradle.core.GradleProject.getGradleModel(GradleProject.java:620)
at org.springsource.ide.eclipse.gradle.core.GradleProject.getSkeletalGradleModel(GradleProject.java:641)
at org.springsource.ide.eclipse.gradle.ui.wizards.GradleImportWizardPageOne$11.doit(GradleImportWizardPageOne.java:514)
at org.springsource.ide.eclipse.gradle.core.util.GradleRunnable.run(GradleRunnable.java:84)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)
Caused by: org.gradle.tooling.BuildException: Could not fetch model of type 'HierarchicalEclipseProject' using Gradle distribution 'http://services.gradle.org/distributions/gradle-1.5-bin.zip'.
at org.gradle.tooling.internal.consumer.ResultHandlerAdapter.onFailure(ResultHandlerAdapter.java:53)
at org.gradle.tooling.internal.consumer.async.DefaultAsyncConnection$2.run(DefaultAsyncConnection.java:71)
at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:66)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: org.gradle.api.internal.LocationAwareException: Build file 'F:\work\Eclipse.workspace\DropwizardOpenID\build.gradle' line: 3
A problem occurred evaluating root project 'DropwizardOpenID'.
at org.gradle.initialization.DefaultExceptionAnalyser.transform(DefaultExceptionAnalyser.java:85)
at org.gradle.initialization.MultipleBuildFailuresExceptionAnalyser.transform(MultipleBuildFailuresExceptionAnalyser.java:47)
at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:115)
at org.gradle.initialization.DefaultGradleLauncher.getBuildAnalysis(DefaultGradleLauncher.java:92)
at org.gradle.tooling.internal.provider.BuildModelAction.run(BuildModelAction.java:73)
at org.gradle.tooling.internal.provider.DelegatingBuildModelAction.run(DelegatingBuildModelAction.java:44)
at org.gradle.tooling.internal.provider.ConfiguringBuildAction.run(ConfiguringBuildAction.java:103)
at org.gradle.launcher.exec.InProcessGradleLauncherActionExecuter.execute(InProcessGradleLauncherActionExecuter.java:39)
at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:45)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:42)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:24)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.StartStopIfBuildAndStop.execute(StartStopIfBuildAndStop.java:33)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.ReturnResult.execute(ReturnResult.java:34)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:70)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:68)
at org.gradle.util.Swapper.swap(Swapper.java:38)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:68)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:60)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:59)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:45)
at org.gradle.launcher.daemon.server.DaemonStateCoordinator.runCommand(DaemonStateCoordinator.java:186)
at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy.doBuild(StartBuildOrRespondWithBusy.java:49)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.HandleStop.execute(HandleStop.java:36)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.CatchAndForwardDaemonFailure.execute(CatchAndForwardDaemonFailure.java:32)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.DefaultDaemonCommandExecuter.executeCommand(DefaultDaemonCommandExecuter.java:48)
at org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.handleCommand(DefaultIncomingConnectionHandler.java:155)
at org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.receiveAndHandleCommand(DefaultIncomingConnectionHandler.java:128)
at org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.run(DefaultIncomingConnectionHandler.java:116)
... 4 more
Caused by: org.gradle.api.GradleScriptException: A problem occurred evaluating root project 'DropwizardOpenID'.
at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:54)
at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:127)
at org.gradle.configuration.BuildScriptProcessor.evaluate(BuildScriptProcessor.java:38)
at org.gradle.configuration.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:44)
at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:464)
at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:77)
at org.gradle.configuration.DefaultBuildConfigurer$ConfigureProject.execute(DefaultBuildConfigurer.java:38)
at org.gradle.configuration.DefaultBuildConfigurer$ConfigureProject.execute(DefaultBuildConfigurer.java:36)
at org.gradle.api.internal.project.AbstractProject.configure(AbstractProject.java:440)
at org.gradle.api.internal.project.AbstractProject.allprojects(AbstractProject.java:435)
at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:32)
at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:142)
at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:113)
at org.gradle.initialization.DefaultGradleLauncher.getBuildAnalysis(DefaultGradleLauncher.java:92)
at org.gradle.tooling.internal.provider.BuildModelAction.run(BuildModelAction.java:73)
at org.gradle.tooling.internal.provider.DelegatingBuildModelAction.run(DelegatingBuildModelAction.java:44)
at org.gradle.tooling.internal.provider.ConfiguringBuildAction.run(ConfiguringBuildAction.java:103)
at org.gradle.launcher.exec.InProcessGradleLauncherActionExecuter.execute(InProcessGradleLauncherActionExecuter.java:39)
at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:45)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:42)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:24)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.StartStopIfBuildAndStop.execute(StartStopIfBuildAndStop.java:33)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.ReturnResult.execute(ReturnResult.java:34)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:70)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:68)
at org.gradle.util.Swapper.swap(Swapper.java:38)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:68)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:60)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:59)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:45)
at org.gradle.launcher.daemon.server.DaemonStateCoordinator.runCommand(DaemonStateCoordinator.java:186)
at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy.doBuild(StartBuildOrRespondWithBusy.java:49)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.HandleStop.execute(HandleStop.java:36)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.CatchAndForwardDaemonFailure.execute(CatchAndForwardDaemonFailure.java:32)
at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
at org.gradle.launcher.daemon.server.exec.DefaultDaemonCommandExecuter.executeCommand(DefaultDaemonCommandExecuter.java:48)
at org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.handleCommand(DefaultIncomingConnectionHandler.java:155)
at org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.receiveAndHandleCommand(DefaultIncomingConnectionHandler.java:128)
at org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.run(DefaultIncomingConnectionHandler.java:116)
at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:66)
Caused by: org.gradle.api.internal.MissingMethodException: Could not find method create() for arguments [knows, class org.gradle.api.plugins.shadow.tasks.KnowsTask] on task set.
at org.gradle.api.internal.AbstractDynamicObject.methodMissingException(AbstractDynamicObject.java:68)
at org.gradle.api.internal.AbstractDynamicObject.invokeMethod(AbstractDynamicObject.java:56)
at org.gradle.api.internal.CompositeDynamicObject.invokeMethod(CompositeDynamicObject.java:172)
at org.gradle.api.internal.tasks.DefaultTaskContainer_Decorated.invokeMethod(Unknown Source)
at org.gradle.api.plugins.shadow.ShadowPlugin.addShadow(ShadowPlugin.groovy:31)
at org.gradle.api.plugins.shadow.ShadowPlugin$addShadow.callCurrent(Unknown Source)
at org.gradle.api.plugins.shadow.ShadowPlugin.apply(ShadowPlugin.groovy:18)
at org.gradle.api.plugins.shadow.ShadowPlugin.apply(ShadowPlugin.groovy)
at org.gradle.api.internal.plugins.DefaultProjectsPluginContainer.providePlugin(DefaultProjectsPluginContainer.java:107)
at org.gradle.api.internal.plugins.DefaultProjectsPluginContainer.addPluginInternal(DefaultProjectsPluginContainer.java:71)
at org.gradle.api.internal.plugins.DefaultProjectsPluginContainer.apply(DefaultProjectsPluginContainer.java:37)
at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.applyPlugin(DefaultObjectConfigurationAction.java:101)
at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.access$200(DefaultObjectConfigurationAction.java:32)
at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction$3.run(DefaultObjectConfigurationAction.java:72)
at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.execute(DefaultObjectConfigurationAction.java:114)
at org.gradle.api.internal.project.AbstractProject.apply(AbstractProject.java:846)
at org.gradle.api.Project$apply.call(Unknown Source)
at org.gradle.api.internal.project.ProjectScript.apply(ProjectScript.groovy:34)
at org.gradle.api.Script$apply.callCurrent(Unknown Source)
at build_36u64arlp1515e95jca9gg3h4i.run(F:\work\Eclipse.workspace\DropwizardOpenID\build.gradle:3)
at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:52)
... 53 more

Matching the Jar task signatures

this is a nice to have, but having the ShadowTask match or inherit from Jar would allow it to be used as a drop in replacement.

For example archiveName is missing, though destinationDir does exist.

the obvious workaround is below, but not optimal

shadow {
  exclude 'META-INF/*.DSA'
  exclude 'META-INF/*.RSA'
  destinationDir = someTask.source

  ext.archiveName = "${outputJarBaseName}${jarVersion}${jarClassifier}.$extension"
}

Include / Exclude does not work on Windows

I am trying to use include and exclude on my shadow jar configuration so I can prevent certain things from getting added to the final jar, such as Gradle plugins and a very large library (22MB) that is not needed inside the jar.

This is what my shadow jar configuration looks like:

shadowJar {
    exclude 'META-INF/*.DSA'
    exclude 'META-INF/*.RSA'
    include(dependency("com.couchbase.client:couchbase-client:1.4.2"))
    exclude(dependency("org.zeroturnaround:gradle-jrebel-plugin:1.1.2"))
    exclude(dependency('org.spigotmc:spigot:1.7.9-R0.2-SNAPSHOT'))
}

This configuration outputs a jar 1KB in size with absolutely no contents, other than MANIFEST.MF file with the following contents:

Manifest-Version: 1.0

Removing the 'include' line fixes this and shadow then includes everything in the final jar. I guess using include overrides the default wildcard include but it doesn't seem to actually include anything. com.couchbase.client is a library I use and Gradle resolves it properly, same thing with org.spigotmc. org.zeroturnaround is a Gradle plugin that does not need to be included in the final jar.

Edit: Paste of the master build file http://pastebin.com/ZURWvVw0

Shadow jar is not updated when sources changed.

  1. Create project with shadow plugin.
  2. Run gradle shadow.
  3. Change java sources.
  4. Run gradle shadow.

In the output we have:

:copySignedLibs UP-TO-DATE
:compileJava
:processResources UP-TO-DATE
:classes
:jar
:shadow UP-TO-DATE

BUILD SUCCESSFUL

The shadow jar will be the same as after step 2, while the source jar is updated.

Java8 - Invalid lambda deserialization error after relocation of packages

@kzarzycki - Here's the new ticket (originally from: #55)

Thanks John, Minecrell!

John, that's very good that you got a fix already, I'll wait for the new version of your awesome plugin:)

Unfortunately, it seems there will be another issue that is now related to JDK8, lambdas & asm 5.x. As I believe it's more an issue of asm than shadow, I have just submitted a bug on OW2 asm issue tracker:
http://forge.ow2.org/tracker/?func=detail&aid=317531&group_id=23&atid=100023

But it also might be an issue of how you use asm in shadow, so I wanted to submit an issue for you too.
Could you please look into that too? I've created a sample project for showing this issue here:
https://github.com/kzarzycki/asm-lambda-deserialization-error-test

It should help you jump right to the problem. I'll be gratefull if you could look into that.

Lingering package name & folders for relocations in source project.

From @Minecrell - #53

Just tested the new version 1.0.0 and it doesn't generate the old folders of the dependencies anymore. However, for some reason in the JAR file is an empty folder with the name of the file. (In my case GradleTest-1.0-all). This is kinda strange but I don't really mind, but maybe it is just a small mistake that is easily fixable?
Relocations of packages within the source files still generate their old folders in the JAR but as of I don't use that, it's not important to fix (for me).

Remove shadowed dependencies from Maven POM and Ivy configuration

Once a JAR has been shadowed it should be removed as a dependency in the generated Maven POM or Ivy configuration file. The Maven shade plugin does this automatically. In addition, Maven shade offers the option to keep the dependency but changed to "provided" scope (keepDependenciesWithProvidedScope) or to raise second level dependencies to primary dependencies (promoteTransitiveDependencies).

Applies JavaPlugin unnecessarily

In src/main/groovy/com/github/jengelman/gradle/plugins/shadow/ShadowPlugin.groovy, the Java plugin is explicitly applied, which can cause problems with some projects. I believe it can be avoided in one of two ways. Either apply the JavaBasePlugin instead, which is less intrusive and more friendly. Or even better, wrap all the apply below that line in a project.plugins.withType(JavaBase) call, which will let the plugin react to the pieces it needs, and doesn't enforce a certain plugin ordering.

Package only certain dependencies.

I have a project with a costom gradle plugin that adds a lot of dependencies. I have one additional dependency, which again have one dependency, which I need to include in my jar. The two dependencies have different groupId's so I couldn't find a way using groupFilter. I also tried using exclude and include, but I couldn't figure out how to exclude everything, and then include certain folders.

(I know this might not be an issue, but this was the best place I found to ask)

exclude not working in 0.7.1?

0.7.1 doesn't seem to exclude under META-INF. For example,

shadow {
    exclude 'META-INF/*.SF'
    exclude 'META-INF/*.RSA'
    exclude 'META-INF/*.DSA'
}

will create a jar file that has the corresponding files under META-INF. The same build using 0.6 will exclude the files (but 0.6 doesn't seem to support a way to declare a main class).

Failure to compile in gradle-1.12

I fetched the latest from github today and wanted to add this to our project. During bulld, I got this error:
:shadow:compileJava UP-TO-DATE
:shadow:compileGroovy
:shadow:processResources
:shadow:classes
:shadow:jar
:shadow:assemble
:shadow:compileTestJava UP-TO-DATE
:shadow:compileTestGroovy
Download http://jcenter.bintray.com/org/spockframework/spock-core/0.7-groovy-1.8/spock-core-0.7-groovy-1.8.pom
Download http://jcenter.bintray.com/xmlunit/xmlunit/1.3/xmlunit-1.3.pom
Download http://jcenter.bintray.com/org/codehaus/groovy/groovy-all/1.8.8/groovy-all-1.8.8.pom
Download http://jcenter.bintray.com/org/spockframework/spock-core/0.7-groovy-1.8/spock-core-0.7-groovy-1.8.jar
Download http://jcenter.bintray.com/xmlunit/xmlunit/1.3/xmlunit-1.3.jar
Download http://jcenter.bintray.com/org/codehaus/groovy/groovy-all/1.8.8/groovy-all-1.8.8.jar
startup failed:
/home/ccuser/work/MaRS/mars/buildSrc/shadow/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/integ/AppendingTransformerIntegrationSpec.groovy: 36: unable to resolve class org.gradle.tooling.internal.consumer.parameters.ConsumerConnectionParameters
@ line 36, column 1.
import org.gradle.tooling.internal.consumer.parameters.ConsumerConnectionParameters
^

1 error

:shadow:compileTestGroovy FAILED

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':shadow:compileTestGroovy'.

    Compilation failed; see the compiler error output for details.

Could not find property 'zip64' on task ':shadowJar'

I'm getting that error message after upgrading to 0.9.0-M1.

shadowJar {
    manifest {
      attributes 'Implementation-Title': 'CACHE','Main-Class': mainClassName, 'Implementation-Version': jarVersion
    }
    exclude 'META-INF/*.SF'
    exclude 'META-INF/*.DSA'
    exclude 'META-INF/*.RSA'
  }

Update Maven Group ID

Update the Maven Group ID since this isn't a core Gradle project. Shouldn't be using their space.

No signature of method: java.io.ByteArrayOutputStream.write() when using AppendingTransformer

Bad method call in the AppendingTransformer.

    Full exception:
    Possible solutions: write([B), write(int), write(int), wait(), wait(long), write([B, int, int)
at org.gradle.api.plugins.shadow.transformers.AppendingTransformer.transform(AppendingTransformer.groovy:51)
at org.gradle.api.plugins.shadow.transformers.Transformer$transform.call(Unknown Source)
at org.gradle.api.plugins.shadow.impl.DefaultCaster.resourceTransformed(DefaultCaster.groovy:266)
at org.gradle.api.plugins.shadow.impl.DefaultCaster.this$2$resourceTransformed(DefaultCaster.groovy)
at org.gradle.api.plugins.shadow.impl.DefaultCaster$_cast_closure1.doCall(DefaultCaster.groovy:130)
at org.gradle.api.plugins.shadow.impl.DefaultCaster$_cast_closure1.doCall(DefaultCaster.groovy)
at org.gradle.api.plugins.shadow.impl.DefaultCaster.withStats(DefaultCaster.groovy:306)
at org.gradle.api.plugins.shadow.impl.DefaultCaster$withStats.callCurrent(Unknown Source)
at org.gradle.api.plugins.shadow.impl.DefaultCaster$withStats.callCurrent(Unknown Source)
at org.gradle.api.plugins.shadow.impl.DefaultCaster.cast(DefaultCaster.groovy:90)
at org.gradle.api.plugins.shadow.impl.Caster$cast.call(Unknown Source)
at org.gradle.api.plugins.shadow.tasks.ShadowTask.shadow(ShadowTask.groovy:52)
at org.gradle.api.internal.BeanDynamicObject$MetaClassAdapter.invokeMethod(BeanDynamicObject.java:216)
at org.gradle.api.internal.BeanDynamicObject.invokeMethod(BeanDynamicObject.java:122)
at org.gradle.api.internal.CompositeDynamicObject.invokeMethod(CompositeDynamicObject.java:147)
at org.gradle.api.plugins.shadow.tasks.ShadowTask_Decorated.invokeMethod(Unknown Source)
at org.gradle.util.ReflectionUtil.invoke(ReflectionUtil.groovy:23)
at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$4.execute(AnnotationProcessingTaskFactory.java:161)
at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$4.execute(AnnotationProcessingTaskFactory.java:156)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:510)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:499)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:64)

distributions

Currently I'm on Shadow 0.8. It drops my JAR in build/distributions/ which honestly makes sense. I'm not really understanding the point of dropping it in a folder called 'libs' considering that sounds more like a folder for a library.

Any chance of keeping this as distributions?

Include shadow JAR of another submodule instead of just compile output.

I have a project with a similar project layout as in the build scripts here: https://gist.github.com/MineDev2014/4816b9ee78e0c5e1cf26

The project has multiple submodules, the core module includes some libraries and relocates them. Now I want to create another module that will just extend the core module so include the content of the shadow JAR of it's dependencies. I want to switch from Maven (with the shade plugin) to Gradle and it was working with Maven before.

But when using Gradle the shadow JAR of the Core module contains the correct relocated library but the other module does just include the original library without the relocation. Is it possible to include the shadow JAR of the other module instead?

apply 'shadow' must be declared below where version is set

For example if you do:

apply plugin: 'groovy'
apply plugin: 'shadow'

group 'com.github.charliek'
version = "1.0.0"

And run gradle shadow you will get and error such as:

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':shadow'.
> error in opening zip file

With an ls like:

10:24:39 {develop} gittrack$ ls -la build/libs/
total 304
drwxr-xr-x  4 cknudsen  staff     136 Feb  1 10:24 .
drwxr-xr-x  6 cknudsen  staff     204 Feb  1 10:24 ..
-rw-r--r--  1 cknudsen  staff  155196 Feb  1 10:24 gittrack-0.0.1.jar
-rw-r--r--  1 cknudsen  staff       0 Feb  1 10:24 gittrack-shadow-unspecified.jar

It appears the version is not being picked up properly since the below will work as expected:

apply plugin: 'groovy'

group 'com.github.charliek'
version = "1.0.0"

apply plugin: 'shadow'

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.