Sunday, April 8, 2012

IntelliJIDEA Tip: Configuration Profiles

How many plugins do you have installed in your IntelliJIDEA instance? How many of the plugins are actually active? Do you need all the plugins to be active at once? Thins might be a quite realistic scenario that you have a fairly large number of plugins activated but you need only a some of them to be active while working on some particular project. Unfortunately, there's no such thing in IntelliJ as "configuration profiles" out of the box, so that for each "profile" you could enable only specific features and thus drop some weight of your IDE while working on a specific task. However, the "profiles" can easily be emulated. In IntelliJ the settings are stored under USER_HOME/.IntelliJIDEAxx folder. There you will find all the settings, plugins, and other stuff related to your current IntelliJ installation. This directory is actually the current "profile" of your IntelliJ installation. In IDEA_HOME/bin/idea.properties file there is a number of properties that refer to the settings directory:
 
 idea.config.path=${user.home}/.IntelliJIdea/config
 idea.system.path=${user.home}/.IntelliJIdea/system
 idea.plugins.path=${user.home}/.IntelliJIdea/config/plugins
 idea.log.path=${user.home}/.IntelliJIdea/system/log
So in order to create a new profile you need to copy the settings directory from USER_HOME/.IntelliJIdea to USER_HOME/.MyIntelliJ and in the configuration file that points to the settings directory you need to change to pointers accordingly to:
 
 idea.config.path=${user.home}/.MyIntelliJ/config
 idea.system.path=${user.home}/.MyIntelliJ/system
 idea.plugins.path=${user.home}/.MyIntelliJ/config/plugins
 idea.log.path=${user.home}/.MyIntelliJ/system/log
Assume, I will keep the configuration in MyIntelliJ.properties file. Now, on the startup, IntelliJ just needs to know, which properties file to use. As the documentation says, we can either set up IDEA_PROPERTIES environment variable to specify custom location of this properties file, like
set IDEA_PROPERTIES=c:\config\MyIntelliJ.properties
or in unix:
export IDEA_PROPERTIES=/home/anton/MyIntelliJ.properties
In the environment variable isn't specified, the configuration file is searched according following sequence (first successful is used):
1. USER_HOME/
2. IDEA_HOME/bin

This way, it is pretty much possible to organize the profiles for IntelliJ, however, it would be cool to have such possibility out of the box via UI configuration.

1 comment:

Vivek said...

It is also required to change these values if the User Directory ${user.home} by default is mapped to a Network Drive.



I was getting wierd errors with IntelliJ internal classes and the IntelliJ build was failing to compile any modules

IntelliJ Internal error: (java.io.FileNotFoundException) \rbmgfs1015\home$\kumarv02\.IdeaIC12\system\compile-server\endeavour_7c3a61b8\timestamps\data (The system cannot find the path specified)
java.io.FileNotFoundException: \rbmgfs1015\home$\kumarv02\.IdeaIC12\system\compile-server\endeavour_7c3a61b8\timestamps\data (The system cannot find the path specified)
createComponent returns null for class com.intellij.codeInsight.daemon.DaemonCodeAnalyzer

To fix the above errors, I made changes to idea.properties file to force it point to the local drive

idea.config.path=D:/JetBrains/IntelliJIDEA/config
idea.system.path=D:/JetBrains/IntelliJIDEA/system
idea.plugins.path=D:/JetBrains/IntelliJIDEA/config/plugins
idea.log.path=D:/JetBrains/IntelliJIDEA/system/log

This fixed the problem with IntelliJ compilation