Если вы запросите JAR
имя файла , оно будет работать при запуске из файла JAR
, в противном случае будет возвращено что-то вроде classes
, поэтому можно использовать следующий код:
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:
Если вам нужна большая точность и устойчивость к переименованию расширения файла, проверьте, должен ли файл содержать MANIFEST.MF
:
public static boolean runningFromJAR()
{
try
{
String jarFilePath = new File(ProgramDirectoryUtilities.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;
}
}