Не могу указать два аргумента bootclasspath для maven-compiler-plugin - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь реализовать прототип для Checker Framework .Я итерировал эту проблему на https://groups.google.com/forum/#!topic/checker-framework-discuss/DL1POFtYUh8, но здесь я расскажу о проблемах, так как это действительно проблема maven-compiler-plugin, а не проблема Checker.

Iя работаю со следующим POM:

<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>com.example</groupId>
<artifactId>checkerExperiments</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
    <!-- These properties will be set by the Maven Dependency plugin -->
    <annotatedJdk>${org.checkerframework:jdk8:jar}</annotatedJdk>
</properties>
<dependencies>
    <dependency>
        <groupId>org.checkerframework</groupId>
        <artifactId>checker-qual</artifactId>
        <version>2.11.0</version>
    </dependency>
    <dependency>
        <groupId>org.checkerframework</groupId>
        <artifactId>jdk8</artifactId>
        <version>2.11.0</version>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <!-- This plugin will set properties values using dependency 
                information -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>properties</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.0</version>
            <configuration>
                <fork>true</fork>
                <source>1.8</source>
                <target>1.8</target>
                <compilerArguments>
                    <Xmaxerrs>10000</Xmaxerrs>
                    <Xmaxwarns>10000</Xmaxwarns>
                </compilerArguments>
                <annotationProcessorPaths>
                    <path>
                        <groupId>org.checkerframework</groupId>
                        <artifactId>checker</artifactId>
                        <version>2.11.0</version>
                    </path>
                </annotationProcessorPaths>
                <annotationProcessors>
                    <!-- Add all the checkers you want to enable here -->
                    <annotationProcessor>org.checkerframework.checker.nullness.NullnessChecker</annotationProcessor>
                </annotationProcessors>
                <compilerArgs combine.children="append">
                    <!-- location of the annotated JDK, which comes from a Maven dependency -->
                    <arg>-Xbootclasspath/p:${annotatedJdk}</arg>
                    <arg>-Xbootclasspath/p:$settings.localRepository/com/google/errorprone/javac/$javac.version/javac-$javac.version.jar</arg>
                    <!-- -Awarns turns type-checking warnings into errors. -->
                    <arg>-Awarns</arg>
                </compilerArgs>
            </configuration>
        </plugin>
    </plugins>
    <pluginManagement>
        <plugins>
            <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
            <plugin>
                <groupId>org.eclipse.m2e</groupId>
                <artifactId>lifecycle-mapping</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <lifecycleMappingMetadata>
                        <pluginExecutions>
                            <pluginExecution>
                                <pluginExecutionFilter>
                                    <groupId>
                                        org.apache.maven.plugins
                                    </groupId>
                                    <artifactId>
                                        maven-dependency-plugin
                                    </artifactId>
                                    <versionRange>
                                        [2.8,)
                                    </versionRange>
                                    <goals>
                                        <goal>properties</goal>
                                    </goals>
                                </pluginExecutionFilter>
                                <action>
                                    <ignore></ignore>
                                </action>
                            </pluginExecution>
                        </pluginExecutions>
                    </lifecycleMappingMetadata>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

Когда я запускаю mvn -X clean package, я получаю в качестве следующей командной строки:

[DEBUG] Command line options:
[DEBUG] -d <homepath>\workspace-2019-09\checkerExperiments\target\classes -classpath <homepath>\workspace-2019-09\checkerExperiments\target\classes;<homepath>\.m2\repository\org\checkerframework\checker-qual\2.11.0\checker-qual-2.11.0.jar;<homepath>\.m2\repository\org\checkerframework\jdk8\2.11.0\jdk8-2.11.0.jar; -sourcepath <homepath>\workspace-2019-09\checkerExperiments\src\main\java;<homepath>\workspace-2019-09\checkerExperiments\target\generated-sources\annotations; <homepath>\workspace-2019-09\checkerExperiments\src\main\java\checkerExperiments\Stuff.java -s <homepath>\workspace-2019-09\checkerExperiments\target\generated-sources\annotations -processor org.checkerframework.checker.nullness.NullnessChecker -processorpath <homepath>\.m2\repository\org\checkerframework\checker\2.11.0\checker-2.11.0.jar; -g -nowarn -target 1.8 -source 1.8 -bootclasspath /p:$settings.localRepository/com/google/errorprone/javac/$javac.version/javac-$javac.version.jar -Awarns

Уведомлениечто это приводит только к одному из значений bootclasspath в командной строке.

Это приводит к следующему:

[ERROR] An exception has occurred in the compiler (1.8.0_152). Please file a bug against the Java compiler via the Java bug reporting page (http://bugreport.java.com) after checking the Bug Database (http://bugs.java.com) for duplicates. Include your program and the following diagnostic in your report. Thank you.
com.sun.tools.javac.code.Symbol$CompletionFailure: class file for java.lang.annotation.Annotation not found

Хорошо, тогда кто-то сказал, что мне нужен "-JX" вместо«-X», поэтому я изменил две строки в pom на:

                    <arg>-J-Xbootclasspath/p:${annotatedJdk}</arg>
                    <arg>-J-Xbootclasspath/p:$settings.localRepository/com/google/errorprone/javac/$javac.version/javac-$javac.version.jar</arg>

Это приводит к следующей командной строке:

[DEBUG] Command line options:
[DEBUG] -d <homepath>\workspace-2019-09\checkerExperiments\target\classes -classpath <homepath>\workspace-2019-09\checkerExperiments\target\classes;<homepath>\.m2\repository\org\checkerframework\checker-qual\2.11.0\checker-qual-2.11.0.jar;<homepath>\.m2\repository\org\checkerframework\jdk8\2.11.0\jdk8-2.11.0.jar; -sourcepath <homepath>\workspace-2019-09\checkerExperiments\src\main\java;<homepath>\workspace-2019-09\checkerExperiments\target\generated-sources\annotations; <homepath>\workspace-2019-09\checkerExperiments\src\main\java\checkerExperiments\Stuff.java -s <homepath>\workspace-2019-09\checkerExperiments\target\generated-sources\annotations -processor org.checkerframework.checker.nullness.NullnessChecker -processorpath <homepath>\.m2\repository\org\checkerframework\checker\2.11.0\checker-2.11.0.jar; -g -nowarn -target 1.8 -source 1.8 -Xmaxerrs 10000 -Xmaxwarns 10000 -Awarns

У которой вообще нет параметра bootclasspath.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...