Add localRuntime and modLocalRuntime configurations (#526)
Closes #481. Co-authored-by: modmuss50 <modmuss50@gmail.com>
This commit is contained in:
		
							parent
							
								
									e409f13b8c
								
							
						
					
					
						commit
						587db4abae
					
				
					 11 changed files with 250 additions and 1 deletions
				
			
		|  | @ -68,6 +68,8 @@ public final class CompileConfiguration { | ||||||
| 		extension.createLazyConfiguration(Constants.Configurations.MAPPINGS_FINAL); | 		extension.createLazyConfiguration(Constants.Configurations.MAPPINGS_FINAL); | ||||||
| 		extension.createLazyConfiguration(Constants.Configurations.LOOM_DEVELOPMENT_DEPENDENCIES); | 		extension.createLazyConfiguration(Constants.Configurations.LOOM_DEVELOPMENT_DEPENDENCIES); | ||||||
| 		extension.createLazyConfiguration(Constants.Configurations.UNPICK_CLASSPATH); | 		extension.createLazyConfiguration(Constants.Configurations.UNPICK_CLASSPATH); | ||||||
|  | 		extension.createLazyConfiguration(Constants.Configurations.LOCAL_RUNTIME); | ||||||
|  | 		extendsFrom(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME, Constants.Configurations.LOCAL_RUNTIME, project); | ||||||
| 
 | 
 | ||||||
| 		for (RemappedConfigurationEntry entry : Constants.MOD_COMPILE_ENTRIES) { | 		for (RemappedConfigurationEntry entry : Constants.MOD_COMPILE_ENTRIES) { | ||||||
| 			extension.createLazyConfiguration(entry.sourceConfiguration()) | 			extension.createLazyConfiguration(entry.sourceConfiguration()) | ||||||
|  |  | ||||||
|  | @ -49,7 +49,8 @@ public class Constants { | ||||||
| 			new RemappedConfigurationEntry("modRuntime", JavaPlugin.RUNTIME_ONLY_CONFIGURATION_NAME, false, true, "", "modRuntimeOnly"), | 			new RemappedConfigurationEntry("modRuntime", JavaPlugin.RUNTIME_ONLY_CONFIGURATION_NAME, false, true, "", "modRuntimeOnly"), | ||||||
| 			new RemappedConfigurationEntry("modCompileOnly", JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME, true, false, ""), | 			new RemappedConfigurationEntry("modCompileOnly", JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME, true, false, ""), | ||||||
| 			new RemappedConfigurationEntry("modCompileOnlyApi", JavaPlugin.COMPILE_ONLY_API_CONFIGURATION_NAME, true, false, JavaPlugin.API_ELEMENTS_CONFIGURATION_NAME), | 			new RemappedConfigurationEntry("modCompileOnlyApi", JavaPlugin.COMPILE_ONLY_API_CONFIGURATION_NAME, true, false, JavaPlugin.API_ELEMENTS_CONFIGURATION_NAME), | ||||||
| 			new RemappedConfigurationEntry("modRuntimeOnly", JavaPlugin.RUNTIME_ONLY_CONFIGURATION_NAME, false, true, JavaPlugin.RUNTIME_ELEMENTS_CONFIGURATION_NAME) | 			new RemappedConfigurationEntry("modRuntimeOnly", JavaPlugin.RUNTIME_ONLY_CONFIGURATION_NAME, false, true, JavaPlugin.RUNTIME_ELEMENTS_CONFIGURATION_NAME), | ||||||
|  | 			new RemappedConfigurationEntry("modLocalRuntime", Configurations.LOCAL_RUNTIME, false, true, "") | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	private Constants() { | 	private Constants() { | ||||||
|  | @ -72,6 +73,12 @@ public class Constants { | ||||||
| 		public static final String LOOM_DEVELOPMENT_DEPENDENCIES = "loomDevelopmentDependencies"; | 		public static final String LOOM_DEVELOPMENT_DEPENDENCIES = "loomDevelopmentDependencies"; | ||||||
| 		public static final String MAPPING_CONSTANTS = "mappingsConstants"; | 		public static final String MAPPING_CONSTANTS = "mappingsConstants"; | ||||||
| 		public static final String UNPICK_CLASSPATH = "unpick"; | 		public static final String UNPICK_CLASSPATH = "unpick"; | ||||||
|  | 		/** | ||||||
|  | 		 * A configuration that behaves like {@code runtimeOnly} but is not | ||||||
|  | 		 * exposed in {@code runtimeElements} to dependents. A bit like | ||||||
|  | 		 * {@code testRuntimeOnly}, but for mods. | ||||||
|  | 		 */ | ||||||
|  | 		public static final String LOCAL_RUNTIME = "localRuntime"; | ||||||
| 		public static final String NAMED_ELEMENTS = "namedElements"; | 		public static final String NAMED_ELEMENTS = "namedElements"; | ||||||
| 
 | 
 | ||||||
| 		private Configurations() { | 		private Configurations() { | ||||||
|  |  | ||||||
|  | @ -0,0 +1,53 @@ | ||||||
|  | /* | ||||||
|  |  * This file is part of fabric-loom, licensed under the MIT License (MIT). | ||||||
|  |  * | ||||||
|  |  * Copyright (c) 2018-2021 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 net.fabricmc.loom.test.util.GradleProjectTestTrait | ||||||
|  | import spock.lang.Specification | ||||||
|  | import spock.lang.Unroll | ||||||
|  | 
 | ||||||
|  | import static net.fabricmc.loom.test.LoomTestConstants.STANDARD_TEST_VERSIONS | ||||||
|  | import static org.gradle.testkit.runner.TaskOutcome.SUCCESS | ||||||
|  | 
 | ||||||
|  | class LocalRuntimeTest extends Specification implements GradleProjectTestTrait { | ||||||
|  | 	@Unroll | ||||||
|  | 	def "build (gradle #version)"() { | ||||||
|  | 		setup: | ||||||
|  | 			def gradle = gradleProject(project: "localRuntime", version: version) | ||||||
|  | 
 | ||||||
|  | 		when: | ||||||
|  | 			def result = gradle.run(tasks: ["build", "publishToMavenLocal"]) | ||||||
|  | 
 | ||||||
|  | 		then: | ||||||
|  | 			result.task(":build").outcome == SUCCESS | ||||||
|  | 			def pomFile = new File(gradle.getProjectDir(), "build/publications/mavenJava/pom-default.xml") | ||||||
|  | 			def pom = pomFile.text | ||||||
|  | 			!pom.contains("fabric-api") | ||||||
|  | 			!pom.contains("enigma") | ||||||
|  | 
 | ||||||
|  | 		where: | ||||||
|  | 			version << STANDARD_TEST_VERSIONS | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										79
									
								
								src/test/resources/projects/localRuntime/build.gradle
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								src/test/resources/projects/localRuntime/build.gradle
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,79 @@ | ||||||
|  | plugins { | ||||||
|  | 	id 'fabric-loom' | ||||||
|  | 	id 'maven-publish' | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | sourceCompatibility = JavaVersion.VERSION_1_8 | ||||||
|  | targetCompatibility = JavaVersion.VERSION_1_8 | ||||||
|  | 
 | ||||||
|  | archivesBaseName = project.archives_base_name | ||||||
|  | version = loom.modVersion | ||||||
|  | group = project.maven_group | ||||||
|  | 
 | ||||||
|  | repositories { | ||||||
|  |     // Add repositories to retrieve artifacts from in here. | ||||||
|  |     // You should only use this when depending on other mods because | ||||||
|  |     // Loom adds the essential maven repositories to download Minecraft and libraries from automatically. | ||||||
|  |     // See https://docs.gradle.org/current/userguide/declaring_repositories.html | ||||||
|  |     // for more information about repositories. | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | dependencies { | ||||||
|  | 	// To change the versions see the gradle.properties file | ||||||
|  | 	minecraft "com.mojang:minecraft:${project.minecraft_version}" | ||||||
|  | 	mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" | ||||||
|  | 	modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" | ||||||
|  | 
 | ||||||
|  | 	// Fabric API. This is technically optional, but you probably want it anyway. | ||||||
|  | 	modLocalRuntime "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" | ||||||
|  | 	localRuntime "cuchaz:enigma:1.4.7" // an example non-mod local dependency | ||||||
|  | 
 | ||||||
|  | 	// PSA: Some older mods, compiled on Loom 0.2.1, might have outdated Maven POMs. | ||||||
|  | 	// You may need to force-disable transitiveness on them. | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | tasks.withType(JavaCompile).configureEach { | ||||||
|  | 	// ensure that the encoding is set to UTF-8, no matter what the system default is | ||||||
|  | 	// this fixes some edge cases with special characters not displaying correctly | ||||||
|  | 	// see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html | ||||||
|  | 	// If Javadoc is generated, this must be specified in that task too. | ||||||
|  | 	it.options.encoding = "UTF-8" | ||||||
|  | 
 | ||||||
|  | 	// The Minecraft launcher currently installs Java 8 for users, so your mod probably wants to target Java 8 too | ||||||
|  | 	// JDK 9 introduced a new way of specifying this that will make sure no newer classes or methods are used. | ||||||
|  | 	// We'll use that if it's available, but otherwise we'll use the older option. | ||||||
|  | 	def targetVersion = 8 | ||||||
|  | 	if (JavaVersion.current().isJava9Compatible()) { | ||||||
|  | 		 it.options.release = targetVersion | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | java { | ||||||
|  | 	// Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task | ||||||
|  | 	// if it is present. | ||||||
|  | 	// If you remove this line, sources will not be generated. | ||||||
|  | 	withSourcesJar() | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | jar { | ||||||
|  | 	from("LICENSE") { | ||||||
|  | 		rename { "${it}_${project.archivesBaseName}"} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // configure the maven publication | ||||||
|  | publishing { | ||||||
|  | 	publications { | ||||||
|  | 		mavenJava(MavenPublication) { | ||||||
|  | 			from components.java | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |      | ||||||
|  |     // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. | ||||||
|  |     repositories { | ||||||
|  |         // Add repositories to publish to here. | ||||||
|  |         // Notice: This block does NOT have the same function as the block in the top level. | ||||||
|  |         // The repositories here will be used for publishing your artifact, not for | ||||||
|  |         // retrieving dependencies. | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										16
									
								
								src/test/resources/projects/localRuntime/gradle.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								src/test/resources/projects/localRuntime/gradle.properties
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,16 @@ | ||||||
|  | # Done to increase the memory available to gradle. | ||||||
|  | org.gradle.jvmargs=-Xmx1G | ||||||
|  | 
 | ||||||
|  | # Fabric Properties | ||||||
|  | 	# check these on https://fabricmc.net/use | ||||||
|  | 	minecraft_version=1.16.5 | ||||||
|  | 	yarn_mappings=1.16.5+build.5 | ||||||
|  | 	loader_version=0.11.2 | ||||||
|  | 
 | ||||||
|  | # Mod Properties | ||||||
|  | 	maven_group = com.example | ||||||
|  | 	archives_base_name = fabric-example-mod | ||||||
|  | 
 | ||||||
|  | # Dependencies | ||||||
|  | 	# currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api | ||||||
|  | 	fabric_version=0.31.0+1.16 | ||||||
							
								
								
									
										2
									
								
								src/test/resources/projects/localRuntime/settings.gradle
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								src/test/resources/projects/localRuntime/settings.gradle
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,2 @@ | ||||||
|  | rootProject.name = "fabric-example-mod" | ||||||
|  | 
 | ||||||
|  | @ -0,0 +1,14 @@ | ||||||
|  | package net.fabricmc.example; | ||||||
|  | 
 | ||||||
|  | import net.fabricmc.api.ModInitializer; | ||||||
|  | 
 | ||||||
|  | public class ExampleMod implements ModInitializer { | ||||||
|  | 	@Override | ||||||
|  | 	public void onInitialize() { | ||||||
|  | 		// This code runs as soon as Minecraft is in a mod-load-ready state. | ||||||
|  | 		// However, some things (like resources) may still be uninitialized. | ||||||
|  | 		// Proceed with mild caution. | ||||||
|  | 
 | ||||||
|  | 		System.out.println("Hello simple Fabric mod"); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | @ -0,0 +1,15 @@ | ||||||
|  | package net.fabricmc.example.mixin; | ||||||
|  | 
 | ||||||
|  | import net.minecraft.client.gui.screen.TitleScreen; | ||||||
|  | import org.spongepowered.asm.mixin.Mixin; | ||||||
|  | import org.spongepowered.asm.mixin.injection.At; | ||||||
|  | import org.spongepowered.asm.mixin.injection.Inject; | ||||||
|  | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; | ||||||
|  | 
 | ||||||
|  | @Mixin(TitleScreen.class) | ||||||
|  | public class ExampleMixin { | ||||||
|  | 	@Inject(at = @At("HEAD"), method = "init()V") | ||||||
|  | 	private void init(CallbackInfo info) { | ||||||
|  | 		System.out.println("This line is printed by an example mod mixin!"); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | @ -0,0 +1,35 @@ | ||||||
|  | { | ||||||
|  |   "schemaVersion": 1, | ||||||
|  |   "id": "modid", | ||||||
|  |   "version": "1.0.0", | ||||||
|  | 
 | ||||||
|  |   "name": "Example Mod", | ||||||
|  |   "description": "This is an example description! Tell everyone what your mod is about!", | ||||||
|  |   "authors": [ | ||||||
|  |     "Me!" | ||||||
|  |   ], | ||||||
|  |   "contact": { | ||||||
|  |     "homepage": "https://fabricmc.net/", | ||||||
|  |     "sources": "https://github.com/FabricMC/fabric-example-mod" | ||||||
|  |   }, | ||||||
|  | 
 | ||||||
|  |   "license": "CC0-1.0", | ||||||
|  | 
 | ||||||
|  |   "environment": "*", | ||||||
|  |   "entrypoints": { | ||||||
|  |     "main": [ | ||||||
|  |       "net.fabricmc.example.ExampleMod" | ||||||
|  |     ] | ||||||
|  |   }, | ||||||
|  |   "mixins": [ | ||||||
|  |     "modid.mixins.json" | ||||||
|  |   ], | ||||||
|  | 
 | ||||||
|  |   "depends": { | ||||||
|  |     "fabricloader": ">=0.7.4", | ||||||
|  |     "minecraft": "1.16.x" | ||||||
|  |   }, | ||||||
|  |   "suggests": { | ||||||
|  |     "another-mod": "*" | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,14 @@ | ||||||
|  | { | ||||||
|  |   "required": true, | ||||||
|  |   "minVersion": "0.8", | ||||||
|  |   "package": "net.fabricmc.example.mixin", | ||||||
|  |   "compatibilityLevel": "JAVA_8", | ||||||
|  |   "mixins": [ | ||||||
|  |   ], | ||||||
|  |   "client": [ | ||||||
|  |     "ExampleMixin" | ||||||
|  |   ], | ||||||
|  |   "injectors": { | ||||||
|  |     "defaultRequire": 1 | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,12 @@ | ||||||
|  | package net.fabricmc.example.test; | ||||||
|  | 
 | ||||||
|  | import net.fabricmc.api.ModInitializer; | ||||||
|  | import net.minecraft.client.gui.screen.TitleScreen; | ||||||
|  | 
 | ||||||
|  | // Just a simple class to ensure the tests can compile against loader and minecraft | ||||||
|  | public class ExampleMod implements ModInitializer { | ||||||
|  | 	@Override | ||||||
|  | 	public void onInitialize() { | ||||||
|  | 		TitleScreen screen = null; | ||||||
|  | 	} | ||||||
|  | } | ||||||
		Loading…
	
		Reference in a new issue