在Maven项目中使用sun.misc,访问限制警告

时间:2018-05-21 04:24:49

标签: java signals compiler-warnings sun

我正在尝试在我的Java应用程序中处理系统信号,以便USR1USR2将在运行环境中触发特定的调试/诊断工作流。

使用以下主要应用程序:

package org.test.signals;

import sun.misc.Signal;

public class App {

    public static void main(String[] args) {

        Signal.handle(new Signal("USR1"), new MySignalHandler());
    }
}

处理程序的位置

package org.test.signals;

import sun.misc.Signal;
import sun.misc.SignalHandler;

public class MySignalHandler implements SignalHandler {

    public void handle(Signal sig) {

        System.out.println("Got: " + sig.getName());
    }
}

在Eclipse中,我在 Signal SignalHandler 上看到以下警告:

  

访问限制:类型'信号'不是API(对所需库的限制' C:\ Program Files \ Java \ jdk1.8.0_151 \ jre \ lib \ rt.jar')

通过快速搜索I found that this fix seems to work,警告就会消失..

然而.. 这是一个maven托管项目;每次刷新/更新Maven项目时,我的.classpath文件都会恢复为之前的配置,并返回警告。

我可以使用Eclipse向导使用全新的Maven Project重现这一点。

最小的 pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.test</groupId>
    <name>signals2</name>

    <version>0.0.1-SNAPSHOT</version>
    <artifactId>signals2</artifactId>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.source>1.8</maven.compiler.source>
    </properties>
</project>

我可以对 pom.xml 进行哪些更改来修复此问题,而不是更新Eclipse中的库?

上面链接中提到的方法中添加的 JRE系统库有什么不同,以及通过maven构建时使用的库?

1 个答案:

答案 0 :(得分:0)

我只是在研究这个问题,并发现了这个错误实际意味着什么 - 以及它出现的原因。

使用Eclipse重新添加系统库后,警告消失,因为这增加了我的Eclipse工作区默认值,即JDK,而不是JRE。

就我而言,JDK中存在sun.misc.Signal类,但JRE中不存在。