Ошибка экспорта модуля при java .naming to spring.ldap.core, даже если в pom используется команда add-export? - PullRequest
1 голос
/ 17 марта 2020

Я пытаюсь обновить свой проект Java 8 до Java 11, и у меня при этом возникло немало проблем, но я исправил все проблемы, за исключением того, что, похоже, не могу обойти эту ошибку каждый раз, когда я пытаюсь запустить свой проект в Netbeans:

ПРЕДУПРЕЖДЕНИЕ: Возникла исключительная ситуация во время инициализации контекста - отмена refre sh попытка: org.springframework.beans.factory.UnsatisfiedDependencyException: ошибка создания компонента с именем 'loginDialogFXController': неудовлетворенная зависимость, выраженная через поле 'ldapTemplate'; вложенным исключением является org.springframework.beans.factory.BeanCreationException: ошибка при создании компонента с именем 'ldapTemplate', определенным в com.decisioninsight.tele ios .spring.config.LdapConfig: создание экземпляра компонента с помощью метода фабрики не выполнено; вложенным исключением является org.springframework.beans.BeanInstantiationException: не удалось создать экземпляр [org.springframework.ldap.core.LdapTemplate]: фабричный метод 'ldapTemplate' вызвал исключение; вложенное исключение - org.springframework.beans.factory.BeanCreationException: ошибка при создании компонента с именем 'contextSource', определенным в com.decisioninsight.tele ios .spring.config.LdapConfig: создание экземпляра компонента с помощью метода фабрики не выполнено; вложенным исключением является org.springframework.beans.BeanInstantiationException: не удалось создать экземпляр [org.springframework.ldap.core.support.LdapContextSource]: фабричный метод 'contextSource' вызвал исключение; вложенное исключение: java .lang.IllegalAccessError: класс org.springframework.ldap.core.support.AbstractContextSource (в модуле spring.ldap.core) не может получить доступ к классу com.sun.jndi.ldap.LdapCtxFactory (в модуле java). .naming), поскольку модуль java .naming не экспортирует com.sun.jndi.ldap в модуль spring.ldap.core

Я знаю, что предполагаемое решение этой ошибки - добавить --add-exports флаг в файл POM, как указано в этом ответе . Вот часть моего файла POM:

<profile>
    <id>default</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.1</version>
                    <configuration>
                        <source>11</source>
                        <target>11</target>
                        <fork>true</fork>
                        <compilerArgs>
                            <arg>--add-exports</arg>
                            <arg>java.naming/com.sun.jndi.ldap=spring.ldap.core</arg>
                        </compilerArgs>
                        <verbose>true</verbose>
                    </configuration>
                </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.6.0</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>exec</goal>
                        </goals>
                        <configuration>
                            <executable>${java.home}/bin/java</executable>
                            <arguments>
                                <argument>-cp .</argument>
                                <argument>--module-path='${project.build.directory}/modules'</argument>
                                <argument>--module=${moduleName}/${mainClass}</argument>
                            </arguments>
                            <longModulepath>false</longModulepath>
                            <addResourcesToClasspath>true</addResourcesToClasspath>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>3.1.1</version>
                <executions>
                    <execution>
                        <id>copy-libs</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/modules</outputDirectory>
                            <includeScope>runtime</includeScope>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>com.coderplus.maven.plugins</groupId>
                <artifactId>copy-rename-maven-plugin</artifactId>
                <version>1.0.1</version>
                <executions>
                    <execution>
                        <id>copy-target</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy</goal>
                        </goals>
                        <configuration>
                       <sourceFile>${project.build.directory}/${project.build.finalName}.jar</sourceFile>
            <destinationFile>${project.build.directory}/modules/${project.build.finalName}.jar</destinationFile>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</profile>

И все же я получаю эту ошибку каждый раз, когда запускаю проект в Netbeans. Я что-то упустил?

1 Ответ

1 голос
/ 19 марта 2020

Итак, после бесчисленных попыток я наконец-то выяснил, что Netbeans / Maven использовал неправильный java .exe для запуска программы, даже если они якобы указывали на правильный исполняемый файл. У меня есть Java программы, для которых требуется 32-битная версия Java 8, поэтому у меня на компьютере установлены 32-битная (по умолчанию) и 64-битная версия AdoptOpenJDK 8, а также 64-битная версия AdoptOpenJDK 11.

Я наконец понял, что исполняемый файл Java 11 имеет опцию --add-exports, хотя Netbeans и Maven оба жаловались, что это не было опцией при использовании исполняемого файла Java 8. Я закончил тем, что изменил файл nbactions.xml, чтобы он указывал конкретно на исполняемый файл Java 11, и он начал работать правильно!

Вот файл nbactions. xml file:

<actions>
    <action>
    <actionName>run</actionName>
    <packagings>
        <packaging>jar</packaging>
    </packagings>
    <goals>
        <goal>process-classes</goal>
        <goal>org.codehaus.mojo:exec-maven-plugin:1.6.0:exec</goal>
    </goals>
    <activatedProfiles>
        <activatedProfile>default</activatedProfile>
    </activatedProfiles>
    <properties>
        <exec.args>--add-exports=java.naming/com.sun.jndi.ldap=spring.ldap.core --module-path='${project.build.directory}/modules' --module=${moduleName}/${mainClass}</exec.args>
        <exec.executable>C:\Program Files\AdoptOpenJDK\jdk-11.0.3.7-hotspot\bin\java</exec.executable>
    </properties>
</action>

Ранее exe c .executable выглядел так java. Убедитесь, что Netbeans / Maven действительно использует правильный исполняемый файл!

...