java - win32 - Cómo detectar que el código se está ejecutando dentro del eclipse IDE
eclipse jee photon r win32 x86_64 (10)
Cómo detectar que el código se está ejecutando dentro del eclipse IDE
1) Crea un método de ayuda como:
public boolean isDevelopmentEnvironment() {
boolean isEclipse = true;
if (System.getenv("eclipse42") == null) {
isEclipse = false;
}
return isEclipse;
}
2) Agregue una variable de entorno a su configuración de lanzamiento:
3) Ejemplo de uso:
if (isDevelopmentEnvironment()) {
// Do bla_yada_bla because the IDE launched this app
}
En realidad, el código no se está ejecutando dentro de Eclipse, sino en un proceso Java separado iniciado por Eclipse, y Eclipse no hace nada por defecto para hacerlo diferente a cualquier otra invocación de su programa.
¿Es lo que quiere saber si su programa se ejecuta bajo un depurador? Si es así, no puedes decir con certeza. Sin embargo, PUEDE inspeccionar los argumentos utilizados para invocar su programa y ver si hay algo allí que no le guste.
Esto podría funcionar si su flujo de trabajo de ejecución alternativo proporciona un conjunto diferente de dependencias:
boolean isRunningInEclipe = false;
try {
Workbench.getInstance();
isRunningInEclipe = true;
} catch (NoClassDefFoundError error) {
//not running in Eclipse that would provide the Workbench class
}
Lo siguiente debería funcionar.
Aunque estoy de acuerdo en que tener el código que detecta un solo IDE como el env env. No es una solución óptima. Usar una bandera en tiempo de ejecución es mejor.
public static boolean isEclipse() {
boolean isEclipse = System.getProperty("java.class.path").toLowerCase().contains("eclipse");
return isEclipse;
}
No creo que haya ninguna manera de hacer esto. Pero lo que sugeriría es solo un argumento de línea de comando como ''depurar''. Entonces en tu método principal solo haz
if (args.length > 0 && args[0].equalsIgnoreCase("debug")) {
// do whatever extra work you require here or set a flag for the rest of the code
}
De esta manera, también puede hacer que su código adicional se ejecute siempre que lo desee, simplemente especificando el parámetro de depuración, pero en condiciones normales nunca se ejecutará.
No tengo conocimiento de una forma genérica de obtener este tipo de información.
Una sugerencia:
Cuando inicie un programa Java (o un servidor web) dentro de Tomcat, simplemente agregue un argumento que indique que Eclipse ha iniciado este programa.
Puede hacerlo abriendo el "Abrir cuadro de diálogo de ejecución" (menú "Ejecutar"), luego seleccione su tipo de aplicación y agregue en la pestaña "Argumentos" a -DrunInEclipse=true
.
En su código Java, puede verificar el valor de la propiedad:
String inEclipseStr = System.getProperty("runInEclipse");
boolean inEclipse = "true".equalsIgnoreCase(inEclipseStr);
De esta manera, si el programa no se está ejecutando dentro de Eclipse (o, lamentablemente, si olvidó establecer la propiedad), la propiedad será null
y el inEclipse
booleano será igual a falso.
Podría detectar si está dentro de un JAR o no, según ¿Puede saber en tiempo de ejecución si está ejecutando Java desde dentro de un tarro?
Eclipse ejecutará su aplicación desde classes/
dir, mientras que la mayoría de los usuarios finales ejecutarán la aplicación desde un JAR.
Puedes probar algo como esto:
if (ClassLoader.getSystemResource("org/eclipse/jdt/core/BindingKey.class")!=null){
System.out.println("Running within Eclipse!!!");
} else {
System.out.println("Running outside Eclipse!!!");
}
Si su espacio de trabajo coincide con algún patrón como "/ home / user / workspace / Project" puede usar el siguiente código:
Boolean desenv = null;
boolean isDevelopment() {
if (desenv != null) return desenv;
try {
desenv = new File(".").getCanonicalPath().contains("workspace");
}
catch (IOException e) {
e.printStackTrace();
}
return desenv;
}
Una forma más genérica y precisa, que se puede usar en cualquier IDE, sería en:
ManagementFactory.getRuntimeMXBean().getInputArguments()
buscando "-Xdebug" || (comenzando con) "-agentlib: jdwp =".
Vine con esto del comentario de @saugata here .
Esto es excelente si desea lanzar una excepción condicional que evite que la aplicación simplemente salga. Use un booleano como "ideWait" y agréguelo a las expresiones de reloj de Eclipse como ideWait = false, así que cada vez que se detenga en ese lanzamiento, y "drop to frame" puede continuar haciendo la depuración feliz (¡lo digo en serio!)