Added support for installing/uninstalling eclipse support from all eclipse locations that lombok is automatically able to find, from the command line without interaction (for mass deployment)

This commit is contained in:
Reinier Zwitserloot committed 2009-11-25 04:23:56 +01:00
1 parent 66d4709855
commit 6c22449923
3 files changed
+65 -30

No files matched your search

+12 -7
View File
@@ -132,13 +132,14 @@ class EclipseFinder {
return drives;
}
/**
* Returns a list of paths of Eclipse installations.
* Eclipse installations are found by checking for the existence of 'eclipse.exe' in the following locations:
*
* X:\*Program Files*\*Eclipse*
* X:\*Eclipse*
* <ul>
* <li>X:\*Program Files*\*Eclipse*</li>
* <li>X:\*Eclipse*</li>
* </ul>
*
* Where 'X' is tried for all local disk drives, unless there's a problem calling fsutil, in which case only
* C: is tried.
@@ -204,9 +205,13 @@ class EclipseFinder {
* Calls the OS-dependent 'find Eclipse' routine. If the local OS doesn't have a routine written for it,
* null is returned.
*
* @param locations List of valid eclipse locations - provide an empty list; this method will fill it.
* @param problems List of eclipse locations that seem to contain half-baked eclipses that can't be installed.
* Provide an empty list; this method will fill it.
* @param locations
* List of valid eclipse locations - provide an empty list; this
* method will fill it.
* @param problems
* List of eclipse locations that seem to contain half-baked
* eclipses that can't be installed. Provide an empty list; this
* method will fill it.
*/
static void findEclipses(List<EclipseLocation> locations, List<NotAnEclipseException> problems) {
switch (getOS()) {
+14 -10
View File
@@ -99,7 +99,9 @@ final class EclipseLocation {
* Create a new EclipseLocation by pointing at either the directory contain the Eclipse executable, or the executable itself,
* or an eclipse.ini file.
*
* @throws NotAnEclipseException If this isn't an Eclipse executable or a directory with an Eclipse executable.
* @throws NotAnEclipseException
* If this isn't an Eclipse executable or a directory with an
* Eclipse executable.
*/
public static EclipseLocation create(String path) throws NotAnEclipseException {
if (path == null) throw new NullPointerException("path");
@@ -130,7 +132,6 @@ final class EclipseLocation {
}
private static EclipseLocation findEclipseIniFromExe(File exePath, int loopCounter) throws NotAnEclipseException {
System.out.println(exePath);
/* Try looking for eclipse.ini as sibling to the executable */ {
File ini = new File(exePath.getParentFile(), "eclipse.ini");
if (ini.isFile()) return new EclipseLocation(getFilePath(exePath), ini);
@@ -147,7 +148,7 @@ final class EclipseLocation {
String oPath = exePath.getAbsolutePath();
String nPath = exePath.getCanonicalPath();
if (!oPath.equals(nPath)) try {
return findEclipseIniFromExe(new File(nPath), loopCounter +1);
return findEclipseIniFromExe(new File(nPath), loopCounter + 1);
} catch (NotAnEclipseException ignore) {
// Unlinking didn't help find an eclipse, so continue.
}
@@ -215,7 +216,7 @@ final class EclipseLocation {
"^\\-javaagent\\:.*lombok.*\\.jar$", Pattern.CASE_INSENSITIVE);
private final Pattern BOOTCLASSPATH_LINE_MATCHER = Pattern.compile(
"^\\-Xbootclasspath\\/a\\:(.*lombok.*\\.jar.*)$", Pattern.CASE_INSENSITIVE);
"^\\-Xbootclasspath\\/a\\:(.*lombok.*\\.jar.*)$", Pattern.CASE_INSENSITIVE);
private boolean checkForLombok(File iniFile) throws IOException {
if (!iniFile.exists()) return false;
@@ -257,8 +258,10 @@ final class EclipseLocation {
* It's a no-op if lombok wasn't there in the first place,
* and it will remove a half-succeeded lombok installation as well.
*
* @throws UninstallException If there's an obvious I/O problem that is preventing installation.
* bugs in the uninstall code will probably throw other exceptions; this is intentional.
* @throws UninstallException
* If there's an obvious I/O problem that is preventing
* installation. bugs in the uninstall code will probably throw
* other exceptions; this is intentional.
*/
void uninstall() throws UninstallException {
for (File dir : getUninstallDirs()) {
@@ -319,8 +322,7 @@ final class EclipseLocation {
fos.close();
}
} catch (IOException e) {
throw new UninstallException("Cannot uninstall lombok from " + name +
generateWriteErrorMessage(), e);
throw new UninstallException("Cannot uninstall lombok from " + name + generateWriteErrorMessage(), e);
}
}
}
@@ -356,8 +358,10 @@ final class EclipseLocation {
* Install lombok into the Eclipse at this location.
* If lombok is already there, it is overwritten neatly (upgrade mode).
*
* @throws InstallException If there's an obvious I/O problem that is preventing installation.
* bugs in the install code will probably throw other exceptions; this is intentional.
* @throws InstallException
* If there's an obvious I/O problem that is preventing
* installation. bugs in the install code will probably throw
* other exceptions; this is intentional.
*/
void install() throws InstallException {
// For whatever reason, relative paths in your eclipse.ini file don't work on linux, but only for -javaagent.
+39 -13
View File
@@ -95,31 +95,57 @@ public class Installer {
private JButton installButton;
public static void main(String[] args) {
if (args.length > 0 && args[0].equals("install")) {
if (args.length > 0 && (args[0].equals("install") || args[0].equals("uninstall"))) {
boolean uninstall = args[0].equals("uninstall");
if (args.length < 3 || !args[1].equals("eclipse")) {
System.err.println("Run java -jar lombok.jar install eclipse path/to/eclipse/executable");
System.err.printf("Run java -jar lombok.jar %1$s eclipse path/to/eclipse/executable (or 'auto' to %1$s to all auto-discovered eclipse locations)\n", uninstall ? "uninstall" : "install");
System.exit(1);
}
String path = args[2];
try {
EclipseLocation loc = EclipseLocation.create(path);
loc.install();
System.out.println("Installed to: " + loc.getName());
final List<EclipseLocation> locations = new ArrayList<EclipseLocation>();
final List<NotAnEclipseException> problems = new ArrayList<NotAnEclipseException>();
if (path.equals("auto")) {
EclipseFinder.findEclipses(locations, problems);
} else {
locations.add(EclipseLocation.create(path));
}
int validLocations = locations.size();
for (EclipseLocation loc : locations) {
try {
if (uninstall) {
loc.uninstall();
} else {
loc.install();
}
System.out.printf("Lombok %s %s: %s\n", uninstall ? "uninstalled" : "installed", uninstall ? "from" : "to", loc.getName());
} catch (InstallException e) {
System.err.printf("Installation at %s failed:\n", loc.getName());
System.err.println(e.getMessage());
validLocations--;
} catch (UninstallException e) {
System.err.printf("Uninstall at %s failed:\n", loc.getName());
System.err.println(e.getMessage());
validLocations--;
}
}
for (NotAnEclipseException problem : problems) {
System.err.println("WARNING: " + problem.getMessage());
}
if (validLocations == 0) {
System.err.println("WARNING: Zero valid locations found; so nothing was done.");
}
System.exit(0);
} catch (NotAnEclipseException e) {
System.err.println("Not a valid eclipse location:");
System.err.println(e.getMessage());
System.exit(2);
} catch (InstallException e) {
System.err.println("Installation failed:");
System.err.println(e.getMessage());
System.exit(1);
}
}
if (args.length > 0 && args[0].equals("uninstall")) {
if (args.length < 3 || !args[1].equals("eclipse")) {
System.err.println("Run java -jar lombok.jar uninstall eclipse path/to/eclipse/executable");
System.err.println("Run java -jar lombok.jar uninstall eclipse path/to/eclipse/executable (or 'auto' to uninstall all auto-discovered eclipse locations)");
System.exit(1);
}
String path = args[2];
@@ -732,7 +758,7 @@ public class Installer {
constraints.gridx = 0;
constraints.gridy = 0;
constraints.insets = new Insets(8, 8, 8, 8);
appWindowContainer.add(leftGraphic,constraints);
appWindowContainer.add(leftGraphic, constraints);
constraints.insets = new Insets(0, 0, 0, 0);
constraints.gridx++;
@@ -740,7 +766,7 @@ public class Installer {
constraints.gridheight = 1;
constraints.fill = GridBagConstraints.HORIZONTAL;
constraints.ipadx = 16;
constraints.ipady = 14 ;
constraints.ipady = 14;
appWindowContainer.add(javacArea, constraints);
constraints.gridy++;
@@ -789,7 +815,7 @@ public class Installer {
rt.exec(cmd);
break;
case MAC_OS_X:
rt.exec( "open " + ABOUT_LOMBOK_URL.toString());
rt.exec("open " + ABOUT_LOMBOK_URL.toString());
break;
default:
case UNIX: