Eclipse maven compiler не поддерживает компилятор-плагин compilerArgs - PullRequest
1 голос
/ 30 апреля 2019

У нас есть коллекция проектов модулей Java (с использованием JDK11).

Для наших интеграционных тестов существует отдельный проект. Этот проект должен иметь возможность доступа к основному проекту приложения для запуска его тестов, но мы не хотим добавлять экспорт в основной модуль приложения, потому что он необходим только при выполнении наших тестов.

Решением было добавить экспорт, используя compilerArgs в нашем интеграционном тестовом проекте:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>${maven.compiler.plugin.version}</version>
            <configuration>
                <release>${java.version}</release>
                <parameters>true</parameters>
                <showDeprecation>true</showDeprecation>
                <showWarnings>true</showWarnings>
                <compilerArgs>
                    <arg>--add-exports</arg>
                    <arg>com.example.application/com.example.application=com.example.integration_tests</arg>
                </compilerArgs>
            </configuration>
        </plugin>
    </plugins>
</build>

Это работает для командной строки mvn clean install. Но, к сожалению, это не работает для затмения. По любой причине eclipse игнорирует эти compilerArgs и продолжает выдавать ошибки, из-за которых основной класс приложения недоступен.

Есть ли способ заставить eclipse использовать эти compilerArgs? Или это какой-то аспект модульной системы, который Eclipse еще не успел охватить?

1 Ответ

1 голос
/ 30 апреля 2019

Аргумент компилятора --add-exports можно установить вручную для зависимостей Maven в файле .classpath, заменив

<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
    <attributes>
        <attribute name="maven.pomderived" value="true"/>
    </attributes>
</classpathentry>

с

<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
    <attributes>
        <attribute name="add-exports" value="com.example.application/com.example.application=com.example.integration_tests"/>
        <attribute name="maven.pomderived" value="true"/>
    </attributes>
</classpathentry>

К сожалению, щелкнув правой кнопкой мыши проект и выбрав Maven> Обновить проект ... отменяет ручные настройки .

См .: Ошибка Eclipse 543631 - Eclipse - Maven - JPMS (пожалуйста, прокомментируйте и проголосуйте там, если хотите использовать эту функцию)

Чтобы восстановить настройки вручную после обновления проекта, вы можете заменить файл .classpath его версией до обновления проекта.

Пожалуйста, рассмотрите следующие альтернативы отдельному проекту для тестового кода, который использует JPMS, но получает доступ к внутренним компонентам модуля:

  • Поместите тестовый код в src/test/java/ вместо отдельного проекта (доступ к внутренним компонентам указывает, что это модульный тест, а не интеграционный тест)
  • В отдельном (интеграционном) тестовом проекте не получить доступ к внутренним материалам необходимого модуля
  • Не использовать JPMS в отдельном (интеграционном) тестовом проекте
...