2015-09-16 56 views
1

如何獲取執行的jar的位置?我發現了很多解決方案,但沒有一個適合我。當我在我的IDE中運行它們時,一切都很好。只要我建立一個jar文件並運行它與java -jar myapp.jar輸出就像/.../myapp.jar!/foo/bar如何獲得被執行的jar的絕對路徑?

我將在myapp.jar運行代碼 - 不在任何庫中。

位置罐子:/home/me/dev/myapp/myapp.jar
預期輸出:/home/me/dev/myapp/

我不想工作目錄,因爲我將與System.getProperty("user.dir");

知道爲什麼我想這樣做:

我想在實際的jar旁邊存儲和加載文件。像

/home/me/bin/myapp/myapp.jar 
/home/me/bin/myapp/license.key 

我想避免文件保存像System.getProperty("user.home");一些通用的文件夾中。我不想將文件存儲在jar文件中。

+0

請參見http://計算器.com/questions/320542/how-to-get-the-path-of-a-running-jar-file – flafoux

+0

@flafoux這些解決方案都不能提供我期望的輸出。 – Brettetete

+4

這裏的總體重要問題是:爲什麼你需要這些信息?通常,不需要知道任何JAR文件的位置。事實上,這個問題似乎是[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。 – Seelenvirtuose

回答

0

java.nio.file.Paths.get(".").toAbsolutePath()將返回當前目錄的絕對路徑。

+0

我在這裏引用我的問題:「我不想要工作目錄」 – Brettetete

+0

嘗試創建簡單的類,它只是將'Paths.get(「。」).toAbsolutePath()'打印到標準輸出創建包含這個類的jar文件。然後將這個jar文件移動到不同的文件夾並運行'java -jar test.jar'。我看到jar文件所在目錄的名稱打印到標準輸出。我認爲這是你想要的。 – dsavickas

+0

'cd/tmp && java -jar/home/me/myapp.jar'會導致'/ tmp /' - 不是我想要的。我想要'/ home/me /' – Brettetete

0

我用的東西沿着這些路線:。)

[YourClass] .class.getProtectionDomain()getCodeSource()的getLocation()的getPath(

問候

+0

給我以下結果'file:/home/me/myapp/myapp.jar!/ META-INF/classes!/' – Brettetete

+0

我得到file:/ home/me/myapp/myapp.jar你使用的是什麼JRE,你是如何打包jar的? –

相關問題