jar文件使用java驻留在linux中的目录的物理位置

时间:2015-04-15 05:49:46

标签: java linux

jar文件驻留在Linux文件系统目录

/home/user/hello.jar

每当运行hello.jar时,我得到运行时环境路径而不是jar所在的物理路径,需要获取jar的物理位置,即

/home/user

我该怎么做?

3 个答案:

答案 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

所以你可以修剪类名(完全限定名)。