-
Notifications
You must be signed in to change notification settings - Fork 1
Getting Started
First, you'll need to add the dependency to your project
The artifact you choose will depend on which configuration format you desire. In this example, I'll use YAML which relies on the SnakeYaml library.
Maven Example
<dependency>
<groupId>space.arim.dazzleconf</groupId>
<artifactId>dazzleconf-ext-snakeyaml</artifactId>
<version>1.2.0-M2</version>
</dependency>
Gradle Example
dependencies {
implementation 'space.arim.dazzleconf:dazzleconf-ext-snakeyaml:1.2.0-M2'
}
The latest version of DazzleConf may be slightly more up-to-date than the one in this wiki.
You only need to declare a dependency on the format you choose. There is a transitive dependency on dazzleconf-core.
Gson
Dependency: space.arim.dazzleconf:dazzleconf-ext-gson
Hocon
Dependency: space.arim.dazzleconf:dazzleconf-ext-hocon
SnakeYaml
Dependency: space.arim.dazzleconf:dazzleconf-ext-snakeyaml
If you want to use a version which ends in -SNAPSHOT
, you will need to add the OSSRH repository.
With Maven:
<repository>
<id>ossrh</id>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
</repository>
With Gradle:
repositories {
maven {
url "https://oss.sonatype.org/content/repositories/snapshots/"
}
}
In order for your project to work at runtime, you'll need to shade this library using your build system.
With Maven, that would be the maven-shade-plugin. With Gradle, shadowJar.
I won't go over the specifics of shading because it is assumed you already know that.
Relocation
Relocating space.arim.dazzleconf
is important. Always relocate shaded dependencies when there is the possibility of a conflict.
Transitive Dependencies
Depending on the configuration format you use, your build setup may inadvertently shade the configuration format library, such as SnakeYaml or Gson.
In several cases, the configuration library you use is already provided by the environment, and shouldn't be shaded. To fix this, declare the dependency explicitly and set its scope to provided:
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>1.28</version>
<scope>provided</scope> <!-- Prevents it from being shaded -->
</dependency>