Java – 设置非常基本的系统属性

huangapple 未分类评论49阅读模式
英文:

Java - Set Very basic system property

问题

我正在使用一个Spring Boot应用程序,尝试以编程方式设置系统属性。我不想将URL硬编码,它必须从类路径加载

问题是,我的代码在集成开发环境(IDE)上运行良好,但当我尝试执行JAR文件时,出现以下错误:

 Exception in thread "main" java.lang.reflect.InvocationTargetException
         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
         at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
         at java.lang.reflect.Method.invoke(Unknown Source)
         at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
         at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
         at org.springframework.boot.loader.Launcher.launch(Launcher.java:51)
         at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:52)
 Caused by: java.nio.file.FileSystemNotFoundException
         at com.sun.nio.zipfs.ZipFileSystemProvider.getFileSystem(ZipFileSystemProvider.java:171)
         at com.sun.nio.zipfs.ZipFileSystemProvider.getPath(ZipFileSystemProvider.java:157)
         at java.nio.file.Paths.get(Unknown Source)

我的代码如下:

public static void main(String[] args) {
    try {
        setSystemProperties();
    } catch (IOException e) {
        log.error("错误:在类路径中找不到my.properties文件", e);
    }
}

private static void setSystemProperties() throws IOException {
    ClassPathResource resource = new ClassPathResource("my.properties");
    System.setProperty("my.file", Paths.get(resource.getURI()).toString());
}
英文:

I'm using a Spring Boot APP and I'm trying to set a System property programatically. I don't want to set the URL hardcoded, it must be loaded from the classpath

The problem is that my code runs well on IDE but when I try to execute the jar file I get:

 Exception in thread "main" java.lang.reflect.InvocationTargetException
         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
         at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
         at java.lang.reflect.Method.invoke(Unknown Source)
         at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
         at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
         at org.springframework.boot.loader.Launcher.launch(Launcher.java:51)
         at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:52)
 Caused by: java.nio.file.FileSystemNotFoundException
         at com.sun.nio.zipfs.ZipFileSystemProvider.getFileSystem(ZipFileSystemProvider.java:171)
         at com.sun.nio.zipfs.ZipFileSystemProvider.getPath(ZipFileSystemProvider.java:157)
         at java.nio.file.Paths.get(Unknown Source)

My Code:

public static void main(String[] args) {
	try {
		setSystemProperties();

        } catch (IOException e) {
            log.error("ERROR: Could not find my.properties file in classpath", e);
		}
    }

private static void setSystemProperties() throws IOException {
	ClassPathResource resource = new ClassPathResource("my.properties");
	System.setProperty("my.file", Paths.get(resource.getURI()).toString());
}

答案1

得分: 0

InvocationTargetException是在调用方法时出现底层异常时产生的。在您的代码中添加以下catch块以查看实际原因。

catch (InvocationTargetException e) {
    // 真正的原因
    e.getCause().printStackTrace();
}
英文:

InvocationTargetException occurs when there's some underlying exception while calling method. Add the below catch block in your code to see the actual cause.

catch (InvocationTargetException e) {
        // the real cause
        e.getCause().printStackTrace();
}

huangapple
  • 本文由 发表于 2020年4月8日 18:57:14
  • 转载请务必保留本文链接:https://java.coder-hub.com/61099062.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定