Skip to content

Commit

Permalink
Change how include disables transitive dependencies to allow platfo…
Browse files Browse the repository at this point in the history
…rm 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 <[email protected]>
  • Loading branch information
jpenilla and modmuss50 authored Dec 19, 2023
1 parent f2e8ff2 commit 6f38d5f
Show file tree
Hide file tree
Showing 6 changed files with 92 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,8 @@ public void run() {
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 -> {
Expand Down
Original file line number Diff line number Diff line change
@@ -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
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
21 changes: 21 additions & 0 deletions src/test/resources/projects/includedJars/build.gradle
Original file line number Diff line number Diff line change
@@ -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'
}
1 change: 1 addition & 0 deletions src/test/resources/projects/includedJars/settings.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
rootProject.name = 'includedJars'
Original file line number Diff line number Diff line change
@@ -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": "*"
}

0 comments on commit 6f38d5f

Please sign in to comment.