Moving eclipse installation directory causes problems - eclipse

I've recently re-organised my Eclipse installation directories, to cater for various flavours of Eclipse (Helios, Indigo, Juno), but then this caused a problem as the ".eclipse" directory (that lives in my home directory) has sub folders that identify the eclipse version but end with a suffix that I think identifies the install directory
for example: org.eclipse.platform_3.6.1_12345678
So with changing the Eclipse install directory, and then booting up Eclipse, a new subfolder was created and the knowledge of my plugins installed is lost.
Why does Eclipse do this ? And how can I manage Eclipse such that I can tie the 2 directories together so I am free to move installation folder without breaking anything?
Is there any good practices of managing multiple Eclipse installations, with respect to configuration ( plugins ), and workspaces ?

By default, eclipse always stores its local configuration in the user's home .eclipse folder. You can override the default though.
In the eclipse.ini file for each of your different versions, you can add the following JVM parameter (make sure you add this line below the -vmargs line)
-Dosgi.configuration.area=#user.home/.eclipse<version>
where
<version>
is whatever identifier you choose for that particular version of eclipse.
This should help keep the different configurations separate and prevent them from stomping on each other.
Hope this helps.

Related

How modify Eclipse locations to prevent write to user.home directory?

I have tried all different settings, and yes, I m aware of eclipse.ini and config.ini and also tried different command line arguments! Nothing solved my problem!
All attempts and still each time I run eclipse.exe it wants write to my userhome i.e. the .eclipse and .p2 folders.
I have tried with all settings bellow among others, in different combinations too:
-Dosgi.user.area=file:/c:/eclipse-conf/e46
-Dosgi.configuration.area=file:/c:/eclipse-conf/e46
-Dosgi.instance.area=file:/c:/eclipse-conf/e46
-Declipse.p2.data.area=file:/c:/eclipse-conf/e46/p2
-Dorg.eclipse.equinox.p2.configurationFolder=file:/c:/eclipse-conf/e46/p2
-Dorg.eclipse.equinox.p2.installFolder=file:/c:/eclipse-conf/e46/p2
-Dorg.eclipse.equinox.p2.reconciler.dropins.directory=file:/c:/eclipse-conf/e46/p2
-Dorg.eclipse.equinox.p2.cache=file:/c:/eclipse-conf/e46/p2
-Dorg.eclipse.equinox.p2.roaming=file:/c:/eclipse-conf/e46/p2
-Dorg.eclipse.equinox.p2.cache.shared=file:/c:/eclipse-conf/e46/p2
This did not help! Well it writes to /e46 and /e46/p2 folder but it also creates/writes to c:\users\mrsimplemind\.eclipse & .eclipseextension & .p2
Even if I manually create the folders before it will not help.
Now please anyone here had success to fully isolate eclipse configuration output?
The only way I achieved this was by changing the user.home but I don't like this workaround as there are stuff in the original "user.home" that will be needed in eclipse, e.g. .ssh , .git , .m2 maven etc. I don't want to keep duplicates of profile settings for each eclipse user.home
I just want to isolate eclipse, this should be configurable! I don't like the outputs to user.home .. It is not an option! I want to have control of what eclipse creates in what folders, for each eclipse installation.
(I can only tell from windows os, I don't know how if Eclipse on Mac works better with the settings above)
I dont use OOMPH installer, some comments below are misleading
The method I have tried to solve this problem has been nearly successful. Whether this is an answer for you will depend on your minimum acceptable level of quality.
If you are trying to prevent your Eclipse IDE from filling up your home drive, this technique will work (it has worked for me). It should not matter if Eclipse was installed by Oomph or from a plain zip, as nothing Oomph-related is modified in this solution.
If the requirement is that the user home p2 folder can be completely deleted and yet Eclipse still works without recreating that directory, no I have not been able to achieve that yet.
I am posting this as a partial solution, perhaps in the hope someone else can build upon it to figure out a better workaround. Obviously the perfect solution would be if eclipse had a configurable download location and the installer actually installed all software to only the location selected, but that requires the Eclipse developers to fix the "P2" component of the product. What follows is only a workaround.
Strategy
The premise is that the download pool folder always seems to be hardcoded into the config files to be under the home folder of the user that ran the eclipse installer. The essence of this workaround is to create a fake user home folder in the location of your choice, do a massive find-and-replace in the config files, and then force the Java system property to use that new folder as "user.home" which fools Eclipse into using it for its downloads.
Method
This was tested on Eclipse 4.7 Oxygen.3A on Mint Linux.
Extensive brain surgery of the Eclipse installation folder is needed.
Install Eclipse somewhere other than your user's home drive.
In this example the Oomph installer was given /media/LINAPPS/ubuntu-apps/eclipse-oxy as the install target, which then creates /media/LINAPPS/ubuntu-apps/eclipse-oxy/eclipse during the installation.
Start Eclipse at least once, then close it and make sure Eclipse is not running.
Create a new fake user home drive folder underneath the Eclipse folder.
In this example I created eclipse-oxy/eclipse/fakeHome
Copy the entire (hidden) p2 directory from your user home directory into the new fakeHome.
eg cp -R /home/$USER/.p2 /media/LINAPPS/ubuntu-apps/eclipse-oxy/eclipse/fakeHome/.p2
Go to the eclipse folder and edit the eclipse.ini in a text editor. Make these 2 changes:
set the line after --launcher.library to be the copy of the pool in the new location relative to the eclipse folder, eg : fakeHome/.p2/pool/...etc...
append a new system property setting to end of the file after all the other vm arguments, and set user.home to the new fake user home directory.
eg: -Duser.home=/media/LINAPPS/ubuntu-apps/eclipse-oxy/eclipse/fakeHome
Edit the file eclipse/configuration/org.eclipse.update/platform.xml. Find the first <site> entry and change the url attribute to be the new pool folder relative to the eclipse folder. eg: url="file:fakeHome/.p2/pool/"
Edit the file /media/LINAPPS/ubuntu-apps/eclipse-oxy/eclipse/configuration/org.eclipse.equinox.simpleconfigurator/bundles.info and again find and replace all references to you user home's p2 folder with the new p2 folder under the fakeUser. You could find over 1000 matches to replace here. It again seems to be possible to make these relative to the eclipse folder, so a path of "fakeHome/.p2/pool/....." will work.
Go to the new /eclipse/fakeHome/.p2 folder and edit both of the files there "pools.info" and "profiles.info". Again find any reference to your real user home and replace it with the path to the fakeUser folder. Use the full pathname (from root) for the pool location in both of these files.
Unpack, edit, and repack the latest profileRegistry. Find the folder
eclipse/fakeHome/.p2/org.eclipse.equinox.p2.engine/profileRegistry/_media_LINAPPS_ubuntu-apps_eclipse-oxy_eclipse.profile/. Now find the latest timestamped gz file in that folder. For example it might be called "1529736854441.profile.gz".
gunzip that .gz file. Edit the .profile file and again replace any mention of your real user home with the new fakeUser folder. For example in my installation one of the first property settings had to be changed to
<property name='org.eclipse.equinox.p2.cache' value='/media/LINAPPS/ubuntu-apps/eclipse-oxy/eclipse/fakeHome/.p2/pool'/>
Delete the old gz file, then gzip the profile into a gz, so it has replaced the old one.
I also edited the file /eclipse/fakeHome/.p2/org.eclipse.equinox.p2.core/cache/artifacts.xml and replaced the repository name with a reference to the new location inside fakeHome, but I am not sure this was necessary to get eclipse working.
Start eclipse.
Results
After doing the above, I tried to add Install New Software from the Help menu. After downloading lots of new plugins from Redhat and Spring, the new fakeHome pool occupies 900MB, but the original user home pool is still less than 400MB which is what it was as soon as eclipse had been installed. So it has been successful at moving the download cache of the updater and no files get updated in the old location, but two directories under .p2 still seem to have their timestamps touched.
If anyone finds this useful, or figures out how to improve it, please let me know.
This works on Windows 7, Eclipse Oxygen:
Install Eclipse, but DON'T launch it yet
Edit eclipse.ini and, underneath -vmargs, add an entry to change user home to be a shared folder:
e.g.
-vmargs
-Duser.home=C:\Development
Launch Eclipse. Should see ".eclipse", ".tooling", etc folders created in shared folder, and nothing created under your user folder.
As of Eclipse Java 2019-06 for Windows 10 64-bit
I added my eclipse.ini below:
-vmargs
-D"user.home=C:\your_path_here"
The 3 folders of .eclipse, .p2, & .tooling appeared after I started and then closed eclipse.
I am not sure when these are written into the new path, but it worked in my Windows 10.
Did you try adding the following line to eclipse.ini below -vmargs:
-Dosgi.configuration.area=#user.home/.someFolder
which will use .someFolder instead of .eclipse
or
-Dosgi.configuration.area=C:\path_to_desired_location\.eclipseJAVA

Where does Eclipse store settings and plugins in userdir?

I've just installed a new Linux distro on my box and want to move my Eclipse home from the old /home/username/ to my new one. Because I changed the desktop, I don't want to copy all hidden folders from ~/. So which directories do I need copy in order to have all my installed plugins?
I've already copied ~/.eclipse/ and it definitely contains files related to the plugins but Eclipse won't load them. Any hints?
We've eventually found the directory containing all that stuff by accident. Somehow we broke it and Eclipse refused to start on my coworker's computer:-)
See ~/workspace/.metadata/.plugins or wherever your workspace resides.
As far as I know, Eclipse stores its plugins in its installation directory (eclipse). They might reside in eclipse/plugins or eclipse/dropins. You can copy the whole eclipse directory from your old box.

Backup Eclipse plugins and settings

I'm using Eclipse and have plenty of plugins installed and configured to my needs. Is there any good way to backup these plugins and the configuration of them. I want to be able to replay these plugins in futures eclipse version (as long as they are compatible) and on different PCs.
I know I could simply archive the whole eclipse/ folder, but I find this a little inelegant.
There are two parts to your question:
Copying your settings between Eclipse installs
Copying your installed plugins between Eclipse installs
#1 is easy to do. You can export your Eclipse preferences from the File -> Export... -> Preferences. The resulting file contains all of your preferences for each installed plugin. It is portable between Eclipse installs and versions.
#2 is not really the "Eclipse" way of doing things. It is possible, but you need to structure your installed plugins differently. Rather than using the standard update manager to install your plugins, you can use the dropins folder. What you need to do is to copy every feature and plugin that you want to be shared across multiple installs into a zip file with the following structure:
eclipse/
features/
plugins/
Then you can unzip the file into the dropins folder of all the Eclipses that you want.
More information on dropins:
http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/misc/p2_dropins_format.html
P2 installation replication is a tool to help you backup installed plug-ins, you could install it via Eclipse Marketplace.
According to the settings of configuration, most of them are persisted in your workspace. So you could backup your workspace/.metadata folder.
While inelegant, archiving the entire eclipse folder is also insufficient. I think you want to archive the following:
The entire eclipse installation folder.
The .metadata folder of every workspace.
By doing this, you will not only preserve the plugins and their settings, but you will also preserve an eclipse installation in which you know your plugins work.
I've made small service for myself to synchronize Eclipse settings. Currently it supports Java Templates + Bash Aliases. Could be useful for someone else.
http://confsync.com

Disable Eclipse plugins per workspace

I use Eclipse for different projects, each with its own workspace. They need quite a different set of plugins (SVN vs hg vs git, AppEngine vs Tomcat vs OSGi, and so on), and I have all those plugins installed and active all the time, which clutters the workspace quite a bit. I'd like to selectively disable plugins for each workspace.
Eclipse (3.6/3.7) has a UI for disabling some plugins. It's under Window->Preferences->General->Startup and Shutdown->Plugins activated on startup. However not all plugins are listed here.
To disable other plugins:
It's possible to have separate configuration (osgi.configuration.area) directories:
http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fmisc%2Fruntime-options.html%23osgiconfigurationarea
Simply copy eclipse_dir/configuration to a new location.
Make launchers for each of your workspace and add parameters to your workspace specific launcher, for example:
-data workspace_location -configuration new_location_for_configuration_dir .
You can disable osgi bundles (not same as plugins) by removing it's line from configuration_directory/org.eclipse.equinox.simpleconfigurator/bundles.info file.
The config.ini file in the custom configuration directory must contain this line:
osgi.configuration.cascaded=false
Another solution would be to define a perspective for each workspace, and customize that perspective.
In each one, you can deactivate menu and commands of plugin you do not want, even though those plugins remains loaded.
That help removing some of the "GUI cluttering" caused by the various plugin.
When you switch workspace, you will restore the perspective you were using with the new workspace.
Eclipse has a notion of local and global configuration that might help you. When you start Eclipse with the -local {localDir} argument, Eclipse uses a writable local configuration in {localDir} and treats the (global) install configuration as read-only. Thus, you can install common features in the global configuration (when not using the -local flag), and install local features into the local configuration. In your case, to get per-workspace configurations, you can adopt the convention that the local configuration is inside or beside your workspace directory (though if inside, not managed as an eclipse resource or project), and then always launch pointing at that directory (e.g., eclipse -data {workspaceDir} -local {workspaceDir}/localConfig).
I solved that problem by having two separate eclipse "installations". It isn't the most beautiful solution, but does the job.
Here it is suggested to use General -> Capabilities, but that doesn't seem to exist in 3.5

Can an extra plugin directory be specified on command line

With Eclipse 3.4, is it possible to provide an ADDITIONAL plugin directory from command line? Something like:
eclipse -plugin_dir D:/myproduct/V1.1/plugins -clean
This is just to save copying of plugins everytime.
While copying can be done with script, it's possible that user may not have
write permissions to system install eclipse.
Follow up:
The solution given by #VonC is for reusing same plugins in multiple Eclipses.
I'm looking for a to use Multiple versions of plugins with Same Eclipse.
( If user has Version 1.1 and Vesion 1.2 of my plugin installed )
Resolved:
The directory pointed to by -Dorg.eclipse.equinox.p2.reconciler.dropins.directory
should end with a directory named 'eclipse'
Inside this eclipse where should be directory called plugins,
place all the jars at in the plugins directory
create a launcher , which launch eclipse with additional command line:
-vmargs
-Dorg.eclipse.equinox.p2.reconciler.dropins.directory=AbsolutePath\eclipse
One may want to add -clean also ..
As mentionned in Installing Eclipse (3.4+) plugins in a directory other than ECLIPSE_HOME/plugins, the right way is to define a bundle pools (also introduced here)
See my previous answer for more details.
It space is not a big issue, users can copy the system install of eclipse into a work directory and put additional plugins/features in the dropins/ directory.