自分自身のjarファイルの位置はSystem.getProperty("java.class.path")で取れる。けど、相対パスになることがあるから、FileをPathやらを使って絶対パスを取得する。

package testjarpath;

import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;

public class TestJarPath {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // classパスを取得
        // jarならjarファイル名
        String jar_path = System.getProperty("java.class.path");
        System.out.println(jar_path);
        // ↑これだと、相対パスになることがある。
        // ので、絶対パスを取得する。
        File jar_file = new File(jar_path);
        String jar_path2 = jar_file.getAbsolutePath();
        System.out.println(jar_path2);
        // ↑ これでも中途半端。"/tmp/./TestJarPath.jar"みたいになる。
        
        // ↓ normalize()で正規化する。
        Path path = Paths.get(jar_file.getAbsolutePath());
        String jar_path3 = path.normalize().toString();
        System.out.println(jar_path3);
    }
    
}