Change how include disables transitive dependencies to allow platform dependencies to work (#838)

* Change how `include` disables transitive dependencies to allow platform dependencies to work

* style fix

* Cleanup and add test

* spotlessApply

---------

Co-authored-by: modmuss50 <modmuss50@gmail.com>
This commit is contained in:
Jason Penilla
2023-12-19 05:46:35 -08:00
committed by GitHub
parent f2e8ff2cef
commit 6f38d5f2e8
6 changed files with 92 additions and 2 deletions

View File

@@ -81,7 +81,8 @@ public abstract class LoomConfigurations implements Runnable {
registerNonTransitive(Constants.Configurations.LOADER_DEPENDENCIES, Role.RESOLVABLE);
registerNonTransitive(Constants.Configurations.MINECRAFT, Role.NONE);
registerNonTransitive(Constants.Configurations.INCLUDE, Role.RESOLVABLE);
// We don't need to make this non-transitive due to the way we resolve it. Also, doing so would break platform dependencies.
register(Constants.Configurations.INCLUDE, Role.RESOLVABLE);
registerNonTransitive(Constants.Configurations.MAPPING_CONSTANTS, Role.RESOLVABLE);
register(Constants.Configurations.NAMED_ELEMENTS, Role.CONSUMABLE).configure(configuration -> {

View File

@@ -0,0 +1,58 @@
/*
* This file is part of fabric-loom, licensed under the MIT License (MIT).
*
* Copyright (c) 2023 FabricMC
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package net.fabricmc.loom.test.integration
import spock.lang.Specification
import spock.lang.Unroll
import net.fabricmc.loom.test.util.GradleProjectTestTrait
import static net.fabricmc.loom.test.LoomTestConstants.STANDARD_TEST_VERSIONS
import static org.gradle.testkit.runner.TaskOutcome.SUCCESS
class IncludedJarsTest extends Specification implements GradleProjectTestTrait {
@Unroll
def "included jars (gradle #version)"() {
setup:
def gradle = gradleProject(project: "includedJars", version: version)
when:
def result = gradle.run(tasks: ["remapJar"])
then:
result.task(":remapJar").outcome == SUCCESS
// Assert directly declared dependencies are present
gradle.hasOutputZipEntry("includedJars.jar", "META-INF/jars/log4j-core-2.22.0.jar")
gradle.hasOutputZipEntry("includedJars.jar", "META-INF/jars/adventure-text-serializer-gson-4.14.0.jar")
// But not transitives.
!gradle.hasOutputZipEntry("includedJars.jar", "META-INF/jars/log4j-api-2.22.0.jar")
!gradle.hasOutputZipEntry("includedJars.jar", "META-INF/jars/adventure-api-4.14.0.jar")
where:
version << STANDARD_TEST_VERSIONS
}
}

View File

@@ -53,7 +53,7 @@ class MultiProjectTest extends Specification implements GradleProjectTestTrait {
gradle.hasOutputZipEntry("multiproject-1.0.0.jar", "META-INF/jars/example-1.0.0.jar")
gradle.hasOutputZipEntry("multiproject-1.0.0.jar", "META-INF/jars/core-1.0.0.jar")
gradle.hasOutputZipEntry("multiproject-1.0.0.jar", "META-INF/jars/fabric-api-base-0.2.1+9354966b7d.jar")
gradle.hasOutputZipEntry("multiproject-1.0.0.jar", "META-INF/jars/fabric-api-base-0.3.0+f74f7c7d7d.jar")
where:
version << STANDARD_TEST_VERSIONS

View File

@@ -0,0 +1,21 @@
plugins {
id 'fabric-loom'
}
repositories {
mavenCentral()
}
dependencies {
minecraft 'com.mojang:minecraft:1.18.2'
mappings 'net.fabricmc:yarn:1.18.2+build.1:v2'
modImplementation 'net.fabricmc:fabric-loader:0.13.3'
include 'org.apache.logging.log4j:log4j-core:2.22.0'
// Test bom/platform dependencies
include platform('net.kyori:adventure-bom:4.14.0')
// bom provides version
include 'net.kyori:adventure-text-serializer-gson'
}

View File

@@ -0,0 +1 @@
rootProject.name = 'includedJars'

View File

@@ -0,0 +1,9 @@
{
"schemaVersion": 1,
"id": "modid",
"version": "0.0.0",
"name": "Example Mod",
"description": "This is an example description! Tell everyone what your mod is about!",
"environment": "*"
}