Env File is a plugin for JetBrains IDEs that allows you to set environment variables for your run configurations from one or multiple files.
Please notice that EnvFile
just received a major upgrade and was released as a new major version - v2.0
.
With the main goal of major update being support for more JetBrains platforms a lot of things changed, including UI,
so please be sure to read the updated guide below, even if you already have used previous versions of EnvFile
.
- .env
- YAML dictionary
- JSON dictionary (parsed with YAML parser since JSON is subset of YAML)
All formats assume that both keys and values are strings.
Expand to see supported run configuration types. Italic means that run configuration is only available in paid version of the product.PyCharm
- App Engine server
- Behave
- Django server
- Django tests
- Lettuce
- Pyramid server
- Python
-
Python docs
- Docutils task
- Sphinx task
-
Python test
- Unittests
- Doctests
- Nosetests
- py.test
- Attests
- Tox
IDEA
- Application
- Arquillian JUnit
- Arquillian TestNG
- CloudBees Server
- Cucumber Java
- GWT Configuration
-
Geronimo Server
- Local
- Remote
-
GlassFish Server
- Local
- Remote
- Google AppEngine Dev Server
- Grails
- JAR Application
-
JBoss Server
- Local
- Remote
-
JSR45 Compatible Server
- Local
- Remote
-
Jetty Server
- Local
- Remote
- JUnit
- Kotlin
- Kotlin script
-
Resin
- Local
- Remote
- Spring Boot
-
Spring dmServer
- Spring dmServer (Local)
- Spring dmServer (Remote)
- TestNG
-
TomEE Server
- Local
- Remote
-
TomCat Server
- Local
- Remote
-
WebLogic Server
- Local
- Remote
-
WebSphere Server
- Local
- Remote
RubyMine
- Capistrano
- Cucumber
- Gem Command
- IRB Console
- RSpec
- Rack
- Rails
- Rake
- Ruby
- Spork DRb
- Test::Unit/Shoulda/Minitest
- Zeus Server
GoLand
- Go App Engine
- Go Build
- Go Test
-
Using IDE built-in plugin system:
- Preferences > Plugins > Browse repositories... > Search for "Env File" > Install Plugin
-
Manually:
- Download the latest release and install it manually using Preferences > Plugins > Install plugin from disk...
Restart IDE.
- Add new Run/Debug configuration: + Add new configuration > ...
- Switch to EnvFile tab
- Enable EnvFile checkbox
- Click on + to add a file
Hidden files (starting with a dot) are not displayed in Finder on macOS
by default. To toggle
hidden files in the Open dialog, press COMMAND + SHIFT + ..
Alternatively, one can either tweak macOS
to show hidden files or select any file using
standard Finder dialog and then manually edit path by double-clicking on the entry in the table.
# This line is ignored since it's a comment
SECRET_KEY=hip-hip-env-files
VERSION=1.0
or
# This line is ignored since it's a comment
SECRET_KEY hip-hip-env-files
VERSION 1.0
{
# JSON doesn't have comments but since JSON is subset of YAML
# We parse it with YAML parser and therefore have comments
# And even trialling commas in objects :)
"SECRET_KEY": "hip-hip-env-files",
"VERSION": "1.0", # All non-string literals should be enclosed in quotes; btw this is ignored too
}
# This line is ignored since it's a comment
SECRET_KEY: hip-hip-env-files
VERSION: "1.0" # All non-string literals should be enclosed in quotes; btw this is ignored too
There was a number of requests to support extracting environment variables from bash scripts like:
export SECRET_KEY="hip-hip-env-files"
export VERSION="1.0"
The feasible way to do that is yet to be discovered (if any at all) so the plugin does not support that at the moment.
On the other hand there is a simple workaround that can be used for the time being. The example bash script from above
can be split into an .env
file and a generic script that can be used to set environment variables on a command line:
.env
SECRET_KEY="hip-hip-env-files"
VERSION="1.0"
set-env.sh
while read -r line; do export $line; done < .env
usage
$ . set-env.sh
$ echo $VERSION
1.0
As of version 2.? EnvFile
now supports placeholder / property / environment variable expansion. A placeholder
refers to a variable defined within the same file, a property refers to a system property set via the java -D
mechanism and an environment variable is, well obviously it is an environment variable.
There are a few limitations that variables must adhere to if you want expansion to work. Placeholders and properties
may be any case, consist of any alpha-numeric characters and may contain dots or underscores. Environment variables
follow convention and may only consist of uppercase alpha-numeric characters and may contain dots or underscores. All
variables MUST be wrapped in ${}
, e.g.
# This line is ignored since it's a comment
SECRET_KEY=${WOULD_BE_EXPANDED}
would be expanded, however the example below would not.
# This line is ignored since it's a comment
SECRET_KEY=$WOULD_NOT_BE_EXPANDED
In the event that a variable exists more than once, e.g. is a placeholder and an environment variable then the applied order of precedence is placeholder, then system property and then environment variable. If no expanded value can be found in any of the three locations then the property will remain unchanged.
NOTE: Any variable will be converted to UPPERCASE before attempting to retrieve a value from the environment.
- Add more formats (upon requests)
- Add support for other JetBrains products/plugins (upon requests)
- Add unit tests (¯\_(ツ)_/¯)
EnvFile uses Gradle for building.
$ ./gradlew clean test build
BUILD SUCCESSFUL in 22s
59 actionable tasks: 59 executed
$ ls -1 build/distributions
Env File-2.1.1-SNAPSHOT.zip
Any feedback, bug reports and feature requests are highly appreciated!
Feel free to create an issue, contact me using Github
or just drop me an email to the address specified in
plugin.xml/idea-plugin/vendor@email
.
Copyright (c) 2017 Borys Pierov. See the LICENSE file for license rights and limitations (MIT).