Step 1. Add the JitPack repository to your build file
Add it in your root settings.gradle at the end of repositories:
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
mavenCentral()
maven { url 'https://jitpack.io' }
}
}
Add it in your settings.gradle.kts at the end of repositories:
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
mavenCentral()
maven { url = uri("https://jitpack.io") }
}
}
Add to pom.xml
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
Add it in your build.sbt at the end of resolvers:
resolvers += "jitpack" at "https://jitpack.io"
Add it in your project.clj at the end of repositories:
:repositories [["jitpack" "https://jitpack.io"]]
Step 2. Add the dependency
dependencies {
implementation 'com.github.shyiko:dotenv:0.1.1'
}
dependencies {
implementation("com.github.shyiko:dotenv:0.1.1")
}
<dependency>
<groupId>com.github.shyiko</groupId>
<artifactId>dotenv</artifactId>
<version>0.1.1</version>
</dependency>
libraryDependencies += "com.github.shyiko" % "dotenv" % "0.1.1"
:dependencies [[com.github.shyiko/dotenv "0.1.1"]]
A twelve-factor configuration library for Java 8+.
Features:
<dependency>
<groupId>com.github.shyiko.dotenv</groupId>
<artifactId>dotenv</artifactId>
<version>0.1.1</version>
</dependency>
ENV resolution order (sources higher in the list take precedence over those located lower):
.env
file in current working directory (might not exist).env
file on the classpath(java example)
Let's assume you have a jar file (say app.jar
) which contains .env file (e.g. printf "SCHEME=http\nHOST=localhost\n# comment\nPORT=8080" > src/main/resources/.env
) and Main.java with the following public static void main(...)
:
Map<String, String> dotEnv = DotEnv.load();
System.out.println(dotEnv.get("SCHEME") + "://" + dotEnv.get("HOST") + ":" + dotEnv.get("PORT"))
Executing the following
printf "HOST=0.0.0.0" > .env
PORT=5050 app.jar
will then output http://0.0.0.0:5050
<dependency>
<groupId>com.github.shyiko.dotenv</groupId>
<artifactId>dotenv-guice</artifactId>
<version>0.1.1</version>
</dependency>
(Main.java)
static class S {
private final String scheme;
private final String host;
private final int port;
@Inject
public S(
@DotEnvValue("SCHEME") String scheme,
@DotEnvValue("HOST") String host,
@DotEnvValue("PORT") int port
) {
this.scheme = scheme;
this.host = host;
this.port = port;
}
public void run() {
System.out.println(scheme + "://" + host + ":" + port);
}
}
public static void main(String[] args) {
Injector injector = Guice.createInjector(new DotEnvModule()/*, ... */);
S s = injector.getInstance(S.class);
s.run();
}
(Main.java)
static class S {
private final String scheme;
private final String host;
private final int port;
@Autowired
public S(
@Value("${SCHEME}") String scheme,
@Value("${HOST}") String host,
@Value("${PORT}") int port
) {
this.scheme = scheme;
this.host = host;
this.port = port;
}
public void run() {
System.out.println(scheme + "://" + host + ":" + port);
}
}
public static void main(String[] args) {
ConfigurableApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.getEnvironment().getPropertySources().addFirst(
new MapPropertySource("dotenv", new HashMap<>(DotEnv.load()))
);
ctx.refresh();
S s = ctx.getBeanFactory().createBean(S.class);
s.run();
}
git clone https://github.com/shyiko/dotenv && cd dotenv
./mvnw # shows how to build, test, etc. project
All code, unless specified otherwise, is licensed under the MIT license.
Copyright (c) 2017 Stanley Shyiko.