Использование sun.misc в проекте Maven, предупреждение об ограничении доступа - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь обработать системные сигналы в моем 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 :

Ограничение доступа: тип 'Сигнал' не является API (ограничение для необходимой библиотеки 'C: \ Program Files \ Java \ jdk1.8.0_151 \ jre \ lib \ rt.jar')

При быстром поиске Я обнаружил, что это исправление, похоже, работает , и предупреждения исчезли ..

Однако .. Это управляемый maven проект ;каждый раз, когда я обновляю / обновляю проект Maven, мой .classpath файл возвращается к своей предыдущей конфигурации, и предупреждения возвращаются.

Я могу воспроизвести это с помощью совершенно нового проекта Maven с помощью мастера Eclipse.

Наименьший 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>

Вместо обновления библиотек в Eclipse, какие изменения я могу внести в мой pom.xml , чтобы исправить это?

Чем отличается системная библиотека JRE добавлено в методе, упомянутом в ссылке выше, а библиотека, используемая при сборке через maven?

1 Ответ

0 голосов
/ 10 июня 2018

Я просто больше разбирался в этом и обнаружил, что на самом деле означает эта ошибка и почему она появляется.

Предупреждение исчезает после использования Eclipse для повторного добавления системных библиотек, потому что это добавило мое рабочее пространство Eclipse.по умолчанию, который был JDK, а не JRE.

В моем случае классы sun.misc.Signal существуют в JDK, но не существуют в JRE.

...