【发布时间】:2018-05-21 04:24:49
【问题描述】:
我正在尝试在我的 Java 应用程序中处理系统信号,以便 USR1 和 USR2 将在运行环境中触发特定的调试/诊断工作流。
使用以下主应用程序:
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 上都看到以下警告:
访问限制:'Signal' 类型不是 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 项目来重现这一点。
最小的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构建时使用的库有什么不同?
【问题讨论】:
-
展示您的 .pom 或它的 MCVE 版本可能会很好。
-
在创建新的 Maven 项目时,我发现 Eclipse 向导创建的现成 pom.xml 具有相同的行为。
标签: java signals compiler-warnings sun