jar文件驻留在Linux文件系统目录
中/home/user/hello.jar
每当运行hello.jar时,我得到运行时环境路径而不是jar所在的物理路径,需要获取jar的物理位置,即
/home/user
我该怎么做?
答案 0 :(得分:1)
new File( mainClass.getProtectionDomain()
.getCodeSource()
.getLocation().toURI() )
假设mainClass
是jar文件中的java.lang.Class
,应该可以解决这个问题。
修改强>
完成主要课程:
import java.io.File;
public class App
{
public static void main( String[] args ) throws Exception
{
Class<App> mainClass = App.class;
File f= new File( mainClass.getProtectionDomain()
.getCodeSource()
.getLocation().toURI() );
System.out.println(f);
}
}
答案 1 :(得分:0)
我认为没有一种非常可靠的方法可以做到这一点。我能想到的最好的就是解析类路径并从那里开始工作。以下是获取classpath元素的方法:
ClassLoader classLoader = ClassLoader.getSystemClassLoader();
URL[] urls = ((URLClassLoader) classLoader).getURLs();
此代码假定我们使用默认的系统类加载器。
答案 2 :(得分:0)
试试这个:
URL location = MyClassInJar.class.getResource('/' + MyClassInJar.class.getName().replace('.', '/') + ".class");
String s = location.toString();
此代码返回jar文件的路径和jar中类的路径。 例如
JAR:文件:/Oracle/Middleware/Oracle_Home/oracle_common/modules/com.sun.xml.ws.jaxws-rt_2.2.jar /com/sun/xml/ws/api/message/MyClassInJar.class
所以你可以修剪类名(完全限定名)。