All Projects → cdimascio → Dotenv Java

cdimascio / Dotenv Java

Licence: apache-2.0
🗝️ Dotenv is a no-dep, pure Java module that loads environment variables from a .env file

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to Dotenv Java

Dotenv Kotlin
🗝️ Dotenv is a module that loads environment variables from a .env file
Stars: ✭ 326 (+352.78%)
Mutual labels:  hacktoberfest, environment-variables, dotenv
React Native Dotenv
Load react native environment variables using import statements for multiple env files.
Stars: ✭ 190 (+163.89%)
Mutual labels:  hacktoberfest, environment-variables, dotenv
php-env
A small and fast .env loader for PHP
Stars: ✭ 19 (-73.61%)
Mutual labels:  dotenv, environment-variables
ngx-env
Easily inject environment variables into your Angular applications
Stars: ✭ 73 (+1.39%)
Mutual labels:  dotenv, environment-variables
gconfigs
gConfigs - Config and Secret parser
Stars: ✭ 42 (-41.67%)
Mutual labels:  dotenv, environment-variables
exenv
Exenv makes loading environment variables from external sources easy.
Stars: ✭ 35 (-51.39%)
Mutual labels:  dotenv, environment-variables
dotenv
Load .env files in crystal
Stars: ✭ 16 (-77.78%)
Mutual labels:  dotenv, environment-variables
ts-dotenv
Strongly-typed environment variables for Node.js
Stars: ✭ 18 (-75%)
Mutual labels:  dotenv, environment-variables
webpack-dotenv-plugin
Use dotenv with webpack.
Stars: ✭ 53 (-26.39%)
Mutual labels:  dotenv, environment-variables
envfile
Parse and write environment files with Node.js
Stars: ✭ 42 (-41.67%)
Mutual labels:  dotenv, environment-variables
Sync Dotenv
Keep your .env in sync with .env.example
Stars: ✭ 393 (+445.83%)
Mutual labels:  environment-variables, dotenv
dart environment config
Environment specific config generator for Dart and Flutter applications during CI/CD builds
Stars: ✭ 87 (+20.83%)
Mutual labels:  dotenv, environment-variables
checkdotenv
Verify environment variables presence for Node JS.
Stars: ✭ 12 (-83.33%)
Mutual labels:  dotenv, environment-variables
angular-cli-envvars
Example project for my article "Angular CLI and OS Environment Variables"
Stars: ✭ 56 (-22.22%)
Mutual labels:  dotenv, environment-variables
superconfig
Access environment variables. Also includes presence validation, type coercion and default values.
Stars: ✭ 33 (-54.17%)
Mutual labels:  dotenv, environment-variables
cypress-dotenv
Cypress plugin that enables compatability with dotenv
Stars: ✭ 47 (-34.72%)
Mutual labels:  dotenv, environment-variables
Environs
simplified environment variable parsing
Stars: ✭ 631 (+776.39%)
Mutual labels:  hacktoberfest, environment-variables
dotenvy
Speed up your production sites by ditching .env for key/value variable pairs as Apache, Nginx, and shell equivalents
Stars: ✭ 31 (-56.94%)
Mutual labels:  dotenv, environment-variables
ini
📝 Go INI config management. support multi file load, data override merge. parse ENV variable, parse variable reference. Dotenv file parse and loader. INI配置读取管理,支持多文件加载,数据覆盖合并, 解析ENV变量, 解析变量引用。DotEnv 解析加载
Stars: ✭ 72 (+0%)
Mutual labels:  dotenv, environment-variables
dotenv.net
A library to read .env files in a .NET Core environment
Stars: ✭ 126 (+75%)
Mutual labels:  dotenv, environment-variables

🗝️ dotenv-java

Coverage Status Maven Central Download Codacy Badge

A no-dependency, pure Java port of the Ruby dotenv project. Load environment variables from a .env file.

dotenv

dotenv-java also powers the popular dotenv-kotlin library.

Why dotenv?

Storing configuration in the environment is one of the tenets of a twelve-factor app. Anything that is likely to change between deployment environments–such as resource handles for databases or credentials for external services–should be extracted from the code into environment variables.

But it is not always practical to set environment variables on development machines or continuous integration servers where multiple projects are run. Dotenv load variables from a .env file into ENV when the environment is bootstrapped.

-- Brandon Keepers

Environment variables listed in the host environment override those in .env.

Use dotenv.get("...") instead of Java's System.getenv(...).

Install

Requires Java 8 or greater.

Maven

<dependency>
    <groupId>io.github.cdimascio</groupId>
    <artifactId>dotenv-java</artifactId>
    <version>2.2.0</version>
</dependency>

Gradle

compile 'io.github.cdimascio:dotenv-java:2.2.0'

Looking for the Kotlin variant? get dotenv-kotlin

Usage

Use dotenv.get("...") instead of Java's System.getenv(...). Here's why.

Create a .env file in the root of your project

# formatted as key=value
MY_ENV_VAR1=some_value
MY_EVV_VAR2=some_value
Dotenv dotenv = Dotenv.load();
dotenv.get("MY_ENV_VAR1")

Android Usage

  • Create an assets folder

  • Add env (no dot) to the assets folder

  • Configure dotenv to search /assets for a file with name env

     Dotenv dotenv = Dotenv.configure()
        .directory("/assets")
        .filename("env"); // instead of '.env', use 'env'
    
     dotenv.get("MY_ENV_VAR1");
    

Note: The above configuration is required because dot files in /assets do not appear to resolve on Android. (Seeking recommendations from the Android community on how dotenv-java configuration should work in order to provide the best experience for Android developers)

Alternatively, if you are using Provider android.resource you may specify

 .directory("android.resource://com.example.dimascio.myapp/raw")

Advanced Usage

Configure

Configure dotenv-java once in your application.

Dotenv dotenv = Dotenv.configure()
        .directory("./some/path")
        .ignoreIfMalformed()
        .ignoreIfMissing()
        .load();

Get environment variables

Note, environment variables specified in the host environment take precedence over those in .env.

dotenv.get("HOME");
dotenv.get("MY_ENV_VAR1", "default value");

Iterate over environment variables

Note, environment variables specified in the host environment take precedence over those in .env.

for (DotenvEntry e : dotenv.entries()) {
    System.out.println(e.getKey());
    System.out.println(e.getValue());
}

Configuration options

optional directory

  • path specifies the directory containing .env. Dotenv first searches for .env using the given path on the filesystem. If not found, it searches the given path on the classpath. If directory is not specified it defaults to searching the current working directory on the filesystem. If not found, it searches the current directory on the classpath.

    example

     Dotenv
       .configure()
       .directory("/some/path")
       .load();
    

optional filename

  • Use a filename other than .env. Recommended for use with Android (see details)

    example

     Dotenv
       .configure()
       .filename("myenv")
       .load();
    

optional ignoreIfMalformed

  • Do not throw when .env entries are malformed. Malformed entries are skipped.

    example

     Dotenv
       .configure()
       .ignoreIfMalformed()
       .load();
    

optional ignoreIfMissing

  • Do not throw when .env does not exist. Dotenv will continue to retrieve environment variables that are set in the environment e.g. dotenv["HOME"]

    example

     Dotenv
       .configure()
       .ignoreIfMissing()
       .load();
    

optional systemProperties

  • Load environment variables into System properties, thus making all environment variables accessible via System.getProperty(...)

    example

     Dotenv
       .configure()
       .systemProperties()
       .load();
    

Examples

Powered by dotenv-java

Javadoc

see javadoc

FAQ

Q: Should I deploy a .env to e.g. production?

A: Tenant III of the 12 factor app methodology states "The twelve-factor app stores config in environment variables". Thus, it is not recommended to provide the .env file to such environments. dotenv, however, is super useful in e.g a local development environment as it enables a developer to manage the environment via a file which is more convenient.

Using dotenv in production would be cheating. This type of usage, however is an anti-pattern.

Q: Why should I use dotenv.get("MY_ENV_VAR") instead of System.getenv("MY_ENV_VAR")

A: Since Java does not provide a way to set environment variables on a currently running process, vars listed in .env cannot be set and thus cannot be retrieved using System.getenv(...).

Q: Can I use System.getProperty(...) to retrieve environment variables?

A: Sure. Use the systemProperties option. Or after initializing dotenv set each env var into system properties manually. For example:

example

Dotenv dotenv = Dotenv.configure().load();
dotenv.entries().forEach(e -> System.setProperty(e.getKey(), e.getValue()));
System.getProperty("MY_VAR");

Q: Should I have multiple .env files?

A: No. We strongly recommend against having a "main" .env file and an "environment" .env file like .env.test. Your config should vary between deploys, and you should not be sharing values between environments.

In a twelve-factor app, env vars are granular controls, each fully orthogonal to other env vars. They are never grouped together as “environments”, but instead are independently managed for each deploy. This is a model that scales up smoothly as the app naturally expands into more deploys over its lifetime.

– The Twelve-Factor App

Q: Should I commit my .env file?

A: No. We strongly recommend against committing your .env file to version control. It should only include environment-specific values such as database passwords or API keys. Your production database should have a different password than your development database.

Q: What happens to environment variables that were already set?

A: dotenv-java will never modify any environment variables that have already been set. In particular, if there is a variable in your .env file which collides with one that already exists in your environment, then that variable will be skipped. This behavior allows you to override all .env configurations with a machine-specific environment, although it is not recommended.

Q: What about variable expansion in .env?

A: We haven't been presented with a compelling use case for expanding variables and believe it leads to env vars that are not "fully orthogonal" as The Twelve-Factor App outlines. Please open an issue if you have a compelling use case.

Q: Can I supply a multi-line value?

A: dotenv-java exhibits the same behavior as Java's System.getenv(...), thus if a multi-line value is needed you might consider encoding it via e.g. Base64. see this comment for details.

Note and reference: The FAQs present on motdotla's dotenv node project page are so well done that I've included those that are relevant in the FAQs above.

see CONTRIBUTING.md

License

see LICENSE (Apache 2.0)

Buy Me A Coffee

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].