I have an application that some of my users run from Eclipse, and others run it by using a jar file.
I want some actions to be done when running from within the jar,
If you query the JAR file name it will work if running from a JAR file otherwise it will return something like classes so the following code can be used:
import java.io.File;
public class JarUtilities
{
public static String getJarName()
{
return new File(JarUtilities.class.getProtectionDomain()
.getCodeSource()
.getLocation()
.getPath())
.getName();
}
public static boolean runningFromJar()
{
return getJarName().contains(".jar");
}
}
EDIT:
If you need more accuracy and to be resistant against renaming of the file extension, checking whether the file contains the MANIFEST.MF should work:
public static boolean runningFromJAR()
{
try
{
String jarFilePath = new File(JarUtilities.class.getProtectionDomain()
.getCodeSource()
.getLocation()
.getPath()).
toString();
jarFilePath = URLDecoder.decode(jarFilePath, "UTF-8");
try (ZipFile zipFile = new ZipFile(jarFilePath))
{
ZipEntry zipEntry = zipFile.getEntry("META-INF/MANIFEST.MF");
return zipEntry != null;
}
} catch (Exception exception)
{
return false;
}
}