I have several Eclipse RCP applications in the same suite, whose executables are in the same directory. I'd like to have a different "plugins" directory for each.
Can I do this, and if so, how?
[I know that I could also put all the plugins into the same directory and specify version-specific dependencies, but this is a special case.]
I was able to get this to work after a few hours of reading, experimentation and head-banging. I couldn't find the answer in Stackoverflow; hopefully this will help the next person to look.
First, I restructured the directory containing my executables. A shared "plugins" directory had been alongside the executables. I made copies of it in application-specific subdirectories, and removed the original.
parent
foo.exe
foo.ini
foo
configuration
config.ini
plugins
bar.exe
bar.ini
bar
configuration
config.ini
plugins
Next, I added settings similar to the following, to the top of each *.ini file, above -vmargs. [Your version numbers may vary.] An option and its argument are separated by line breaks.
-startup
foo/plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar
-install
foo
--launcher.library
foo/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.200.v20120522-1813/eclipse_1503.dll
And this existing setting was already underneath -vmargs.
-Dosgi.sharedConfiguration.area=file:configuration
Note: although this works, the "configuration" directory and the -Dosgi.sharedConfiguration.area setting are anachronisms from a single -install directory. It would be more elegant to have config.ini alongside the plug-ins directory, and omit the setting. However, I didn't get that part to work, and can live with it.
Related
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
After exporting my eclipse product, I see the following files and folders:
+ configuration (folder)
+ plugins (folder)
- .eclipseproduct (file)
- myProduct.exe (file)
- myProduct.ini (file)
I would like to rename the configuration folder to something else, or possibly move it to a less prominent location.
The reason is that customers can configure some things in my application by modifying certain application-specific XMLs, and I would like to put those XMLs in a "configuration" folder in the product's root folder, since that's the most intuitive name and location.
I'm afraid that if they see the current configuration folder (the one generated by eclipse, containing the config.ini) they will think this is where they should update/drop those XMLs. This is confusing at best and dangerous at worst, since there are quite delicate files in that folder that should not be manipulated.
I've looked for a way to configure the name or location of this eclipse-generated configuration folder without any luck. Any ideas?
I don't think this can be changed by the product build.
Having the user put anything in any of the Eclipse install directories is not a good idea.
On a Mac system for example these directories are hidden inside an application package and will not normally be visible to the user at all. On other systems the install directory may be read only.
I have exhausted just about every link I could find on this topic --- my Google searches are pure purple links now. It's possible I overlooked something, but anyway...
A user, who does not have root access, would like to use PyDev for Eclipse. We are using Eclipse 3.6.1, Linux x86_64. I have identified that the highest working version of PyDev that we can use is 2.8.0 (did this by using root access to discover that versions higher than that won't install).
All guides point to being able to use the .eclipse folder in the user's home directory, but no matter what I put in there, what combination of subfolders, etc., Eclipse absolutely will not detect PyDev.
Let me break down my process for testing this, one step at a time:
cd .eclipse/org.eclipse.platform_3.6.1_793567567/
mkdir dropins
mkdir dropins/PyDev-2.8.0
cd dropins/PyDev-2.8.0
wget <2.8.0 zip file>
unzip PyDev\ 2.8.0.zip
This results in...
~/
.eclipse/
artifacts.xml
configuration/
dropins/
PyDev-2.8.0/
features/
plugins/
p2/
Like I said, I've re-arranged this in multiple combinations such that "features" and "plugins" are one directory higher, two directories higher, etc. No combination will seem to do the trick.
When I execute eclipse, I'm using:
eclipse -clean -console -consoleLog
There's never any mention anywhere about PyDev's presence even being acknowledged.
A lot of the guides I've found online seem based on Windows. While eclipse.ini does exist for Linux, and while some guides say that file needs to be modified to include the home directory sub-directory, that file is inaccessible to all but root (and therefore cannot be modified).
Is this going to be doable with absolutely zero root intervention?
Why would you even need root access? Just have them download the current version from eclipse.org, unpack it somewhere, run it, and add PyDev.
Is it possible to create Eclipse-style folders (Project Folder, Package and so on) via the Terminal?
I once renamed an Eclipse package like this: mv oldname newname, and I noticed that after doing so, Eclipse no longer considered the folder a Package.
This possibly means that it is a matter of metadata, but I have so far been unsuccessful in locating the files containing the relevant information.
Eclipse does not provide anything to do this and it is not really possible manually.
For a project some information is stored in the .project file in the project folder. Depending on the type of project there may also be a .classpath file and there will also be data stored in the .metadata folder in the workspace and also in a .settings folder in the project.
All the file and folder names starting with . are considered to be hidden on Linux, Unix and Mac systems and are not shown by default. Use the -a flag of ls to see them.
When Eclipse first start, it creates some config files and folders on my hard drive (contains information about work-space ...etc...). I don't like the position it creates config files because config files are all put in my C:\Users\Long folder and that's ugly. I want to put all those config files somewhere else (C:\Eclipse\ for example). This happens in Linux too.
Do you know how to put those files in somewhere else?
Just add the following to your eclipse.ini file (found at the root eclipse installation folder):
-Dosgi.configuration.area=file:/C:/Workspace/.eclipse
To change the default .eclipse folder location, go to ${eclipse.home}, open your eclipse.ini with a text editor and insert there one line more:
-Dosgi.configuration.area=/path_to_new_folder_location/.eclipse/
As someone already said, adding the property -Dosgi.configuration.area in the eclipse.ini file does the trick.
But in my opinion it would be better to rely on the user.home variable and set the destination like for the other variables.
Example with -Dosgi.instance.area.default:
-Dosgi.instance.area.default=#user.home/eclipse-workspace
In my case I just wanted another destination than the default #user.home/.eclipse which was still used by the Eclipse Mars that I keep for old projects and I just defined:
-Dosgi.configuration.area=#user.home/.eclipse-oygen-3
to have a specific destination for the Eclipse Oxygen 3 installation.
Note that syntax works for both Windows and Linux (I did not tested on OSX, but I guess it should).
Eclipse has some command line arguments you can use. One of those arguments is the flag -data which tells Eclipse where the workspace of Eclipse should be located.
So when I create a new workspace, I normally create a shortcut under Windows (or script file under Linux) with the following contents:
eclipse.exe -vm <JDK>\bin\javaw.exe" -data ws -nl en
This defines which JDK should be used, that the workspace is located under ws and that the english locale should be used.
IMHO parameter -configuration does the trick. It must point to a subdirectory named "config". Eclipse will fill this and the upper directory itself with files, e.g. for a JBoss server installation.
If you have more than one eclipse installation, then you should use a different directory for each eclipse installation.
Example how to keep everything in defined places:
"C:\Program Files (x86)\eclipse\eclipse48jee\eclipse.exe" -nl en_US -vm "C:\Program Files (x86)\Java\jdk1.8.0_212\bin" -configuration C:\EclipseData\eclipse48jee\config -data C:\Workspaces\SomeProject