Changes

3,002 bytes added ,  14:32, 18 June 2022
Update to 1.19
Line 1: Line 1: −
{{Under construction}}
   
A '''dependency''' is the reliance of a piece of software on another piece of software. In the context of Minecraft Forge, it is a mod or library which another mod relies or ''depends'' on.
 
A '''dependency''' is the reliance of a piece of software on another piece of software. In the context of Minecraft Forge, it is a mod or library which another mod relies or ''depends'' on.
   Line 19: Line 18:     
== Declaring Dependencies ==
 
== Declaring Dependencies ==
A mod declares a dependency on a mod or library through Gradle, through the <code>dependencies</code> block.<ref>[https://docs.gradle.org/6.8.1/userguide/declaring_dependencies.html Gradle User Guide for 6.8.1: ''Declaring dependencies'']</ref>
+
A mod declares a dependency on a mod or library through Gradle, through the <code>dependencies</code> block.<ref>[https://docs.gradle.org/7.4.2/userguide/declaring_dependencies.html Gradle User Guide: ''Declaring dependencies'']</ref>
   −
For example, to declare a dependency on the <code>net:minecraftforge:eventbus:4.0.0</code> library from the <code>main</code> source set:
+
For example, to declare a dependency on the <code>net:minecraftforge:eventbus:5.0.3</code> library from the <code>main</code> source set:
 
<syntaxhighlight lang="gradle">
 
<syntaxhighlight lang="gradle">
 
dependencies {
 
dependencies {
 
     // 'implementation' is for the main source set
 
     // 'implementation' is for the main source set
     implementation "net.minecraftforge:eventbus:4.0.0"
+
     implementation "net.minecraftforge:eventbus:5.0.3"
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
   −
{{Tip|ForgeGradle automatically adds the [https://files.minecraftforge.net/maven/ Forge Maven] and [https://maven.apache.org/repository/ Maven Central] repositories to projects. If a dependency is not present in these (such as dependencies on other mods), the repository containing the dependency must be declared in the <code>repositories</code> block of the Gradle buildscript.<ref>[https://docs.gradle.org/6.8.1/userguide/declaring_repositories.html Gradle User Guide for 6.8.1: ''Declaring repositories'']</ref>}}
+
{{Tip|ForgeGradle automatically adds the [https://files.minecraftforge.net/maven/ Forge Maven] and [https://maven.apache.org/repository/ Maven Central] repositories to projects. If a dependency is not present in these (such as dependencies on other mods), the repository containing the dependency must be declared in the <code>repositories</code> block of the Gradle buildscript.<ref>[https://docs.gradle.org/current/userguide/declaring_repositories.html Gradle User Guide: ''Declaring repositories'']</ref>}}
    
=== Deobfuscating Dependencies ===
 
=== Deobfuscating Dependencies ===
Line 42: Line 41:  
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
=== Flat Directory Repositories ===
 +
There are occasions where it is needed to temporarily add a dependency on a JAR file that is not present in a Maven repository, such as to add a mod which adds some developer tools during runtime. Gradle allows declaring '''flat directory repositories''', which use a local directory as a simplified repository.<ref>[https://docs.gradle.org/current/userguide/declaring_repositories.html#sub:flat_dir_resolver Gradle User Guide: ''Flat directory repository'']</ref>
 +
 +
A flat directory repository is declared using a <code>flatDir</code> block within the <code>repositories</code> block, and specifying directories using <code>dirs</code>:
 +
<syntaxhighlight lang="gradle">
 +
repositories {
 +
    flatDir {
 +
        dirs 'lib'
 +
    }
 +
}
 +
</syntaxhighlight>
 +
 +
When a dependency artifact is searched for in a flat directory repository, it will look for the following files in order (<code>''ext''</code> defaults to <code>jar</code>)<ref>[https://github.com/gradle/gradle/blob/v7.4.2/subprojects/core-api/src/main/java/org/gradle/api/artifacts/repositories/FlatDirectoryArtifactRepository.java gradle/gradle; tag v7.4.2; org.gradle.api.artifacts.repositories.FlatDirectoryArtifactRepository]</ref>:
 +
* <code>''<artifact>''-''<version>''.''<ext>''</code>
 +
* <code>''<artifact>''-''<version>''-''<classifier>''.''<ext>''</code>
 +
* <code>''<artifact>''.''<ext>''</code>
 +
* <code>''<artifact>''-''<classifier>''.''<ext>''</code>
 +
 +
For example, for the dependency <code>org.junit.jupiter:junit-jupiter-api:5.7.2</code>, it will first search for <code>junit-jupiter-api-5.7.2.jar</code> then <code>junit-jupiter-api.jar</code>. The group ID in the dependency descriptor must be present (due to the presence of non-flat directory repositories as added by ForgeGradle), but it will always be ignored.
 +
 +
{{Tip/Warning
 +
|Flat directory repositories should ''only'' be used temporarily in a local environment, and not used to include a required dependency for your project. For a actual dependency used by your mod, use a remote Maven repository holding the artifact.
 +
}}
 +
 +
=== CurseMaven ===
 +
A commonly used alternative is [https://www.cursemaven.com/ CurseMaven](credits to Wyn Price) which allows you to depend on any file uploaded to [https://www.curseforge.com/minecraft/mc-mods/ CurseForge].
 +
 +
First add the CurseMaven Repository within the <code>repositories</code> block:
 +
<syntaxhighlight lang="gradle">
 +
repositories {
 +
    maven {
 +
        url 'https://www.cursemaven.com'
 +
        // FG4: It's recommended to uncomment the following block
 +
        // content {
 +
        //    includeGroup "curse.maven"
 +
        // }
 +
    }
 +
}
 +
</syntaxhighlight>
 +
 +
Then declare a dependency using the following format:
 +
* <code>''curse.maven'':''<description>-<project-id>'':''<file-id>''</code>
 +
 +
As an example, the dependency <code>curse.maven:jei-238222:3295418 </code>, would resolve to [https://www.curseforge.com/minecraft/mc-mods/jei/files/3295418 this file] on CurseForge.
 +
 +
For more information on usage, visit [https://www.cursemaven.com/ CurseMaven]