Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -951,105 +951,75 @@ class JavaPluginsTest : BasePluginTest() {
@Issue("https://github.com/GradleUp/shadow/issues/882")
@Test
fun compatGradleArtifactTransform() {
settingsScript.writeText("include('app', 'lib')\n")
path("lib/build.gradle")
settingsScript.appendText(
"""
include 'lib', 'app'
"""
.trimIndent()
)
projectScript.writeText("")

path("lib/src/main/java/lib/Lib.java")
.writeText(
"""
plugins {
id 'java-library'
}
package lib;
public class Lib {}
"""
.trimIndent()
)
path("lib/src/main/java/com/company/Utils.java")
path("lib/build.gradle").writeText(getDefaultProjectBuildScript("java") + lineSeparator)

path("app/src/main/java/app/App.java")
.writeText(
"""
package com.company;

public class Utils {
public static void foo() {
System.out.println("bar");
}
}
package app;
public class App {}
"""
.trimIndent()
)
path("app/build.gradle")
.writeText(
"""
import org.gradle.api.artifacts.transform.TransformParameters
import org.gradle.api.artifacts.transform.TransformAction
import org.gradle.api.artifacts.transform.TransformOutputs
import org.gradle.api.artifacts.transform.InputArtifact
import org.gradle.api.file.FileSystemLocation
import org.gradle.api.provider.Provider
${getDefaultProjectBuildScript("java")}

plugins {
id 'application'
id '$shadowPluginId'
}
abstract class NoOpTransform implements TransformAction<TransformParameters.None> {
@InputArtifact
abstract Provider<FileSystemLocation> getInputArtifact()

application {
mainClass = 'com.company.Main'
}

dependencies {
implementation project(':lib')
void transform(TransformOutputs outputs) {
def input = inputArtifact.get().asFile
def output = outputs.file(input.name)
output.bytes = input.bytes
}
}

def transformedAttribute = Attribute.of('custom-transformed', Boolean)
def customAttr = Attribute.of('custom-transformed', Boolean)

dependencies {
implementation project(':lib')
attributesSchema {
attribute(transformedAttribute)
attribute(customAttr)
}
artifactTypes.maybeCreate('jar').attributes.attribute(transformedAttribute, false)
}

dependencies {
registerTransform(CustomTransformAction) {
from.attribute(Attribute.of('artifactType', String), 'jar').attribute(transformedAttribute, false)
to.attribute(Attribute.of('artifactType', String), 'jar').attribute(transformedAttribute, true)
artifactTypes.getByName('jar') {
attributes.attribute(customAttr, false)
}
}

$shadowJarTask {
configurations = [project.configurations.runtimeClasspath]
}

configurations.runtimeClasspath {
attributes.attribute(transformedAttribute, true)
}

abstract class CustomTransformAction implements TransformAction<TransformParameters.None> {
@InputArtifact abstract Provider<FileSystemLocation> getInputArtifact()

@Override
void transform(TransformOutputs outputs) {
outputs.file(inputArtifact.get().asFile)
registerTransform(NoOpTransform) {
from.attribute(customAttr, false)
to.attribute(customAttr, true)
}
}
"""
.trimIndent()
)
path("app/src/main/java/com/company/Main.java")
.writeText(
"""
package com.company;

public class Main {
public static void main(String[] args) {
Utils.foo();
}
configurations.runtimeClasspath {
attributes.attribute(customAttr, true)
}
"""
.trimIndent()
.trimIndent() + lineSeparator
)

runWithSuccess(":app:$SHADOW_JAR_TASK_NAME")

assertThat(jarPath("app/build/libs/app-all.jar")).useAll {
containsAtLeast("com/company/Main.class", "com/company/Utils.class", manifestEntry)
assertThat(jarPath("app/build/libs/app-1.0-all.jar")).useAll {
containsAtLeast("app/", "app/App.class", "lib/", "lib/Lib.class", *manifestEntries)
}
}

Expand Down
Loading