Вопрос NoClassDefFoundError

wiselder

Пользователь
Сообщения
17
Решения
1
Возникает NoClassDefFoundError при запуске сервера. в pom.xml прописано следующее

XML:
<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>1.6.2</version>
</dependency>

При тестах внутри IDE нужные мне классы подтягивались и никаких проблем не было.
Есть идеи как это решить?
Авто объединение сообщений:

Не подтягиваются классы при старте сервере именно из этого пакетика.
 
Последнее редактирование:
offtop почитай)

Авто объединение сообщений:




offtop Потому что они являются внутренними APIs: они могут быть изменены недокументированным или неподдерживаемым способом, и они привязаны к определенному JRE/JDK ( Sun в вашем случае), ограничивая переносимость ваших программ.

Старайтесь избегать использования таких APIs, всегда предпочитайте открытый документированный и указанный класс.
Хотя на говнокодеров плагинщиков, которые не знают возможностей языка и пишут на уровне java 6 с элементами java 8 - этого не понять.

Классы, которые ВС включает в себя с Java 2 SDK, Стандартное издание, осень в группы пакетов java.* , javax.* , org.* и sun.* . Все пакеты, кроме sun.* , являются стандартной частью программы. Java платформа и будет поддерживаться в будущее. В общем, пакеты такие как sun.*, которые находятся вне Платформа Java, может быть различной через OS платформ (Solaris, Windows, Linux, Macintosh и др.) и может измениться в любой момент время без уведомления с версиями SDK (1.2, 1.2.1, 1.2.3 и т. д.). Программы которые содержат прямые вызовы пакетов sun.* , не являются 100% чисто Java.

Каждая компания, которая реализует Java платформа будет делать это в своих собственных частный путь. Классы в sun.* являются присутствует в SDK для поддержки Солнца реализация платформы Java: классы sun.* -это то, что делает Java классы платформы работают "under the covers" для Солнца Java 2 SDK. Эти классы вообще не будут присутствовать на платформе Java другого производителя. Если ваша программа Java запрашивает класс "sun.package.Foo" по имени, он может потерпеть неудачу с ClassNotFoundError, и вы будете утратили главное преимущество развивается в Java году.


Проприетарные классы Sun Java являются частью их реализации Java, а не частью Java API, их использование не документировано и не поддерживается. Поскольку они являются внутренними, их можно изменить в любое время по любой причине, которую решит команда, работающая на Солнце JVM.

Кроме того, реализация Sun Java-не единственная! Ваш код не сможет быть переносим в JVMs от других поставщиков, таких как Oracle/BEA и IBM.

Хорошего дня)


Вопрос закрыт.
Попробуйте запустить свой код с Sun JVM и он у вас будет работать. в Остальных случаях - ошибка ClassNotFound.

Возможная замена:
Авто объединение сообщений:


offtop желаю хорошего незнания)
offtop Так а что по не стабильности и куче ошибок? Я не спрашивал тебя про непереносимость, про нее я тоже знаю на уровне статей с сети, ибо в практике с таким я не встречался.
Хоть и использование sun компонентов и не рекомендуется ввиду возможной несовместимости между версиями жабы или переход с Oracle JDK на OpenJDK приведет программу не в рабочее состояние, я в банже использовал javax.mail от sun'a, ни ошибок, ни нестабильности я не встречал, не знаю что по остальным компонентам. (это не значит, что так делать правильно, у клиента строгая зависимость от оракла и стабильно 8 версия жабы).

Отправь сюда известные ошибки, заодно и я узнаю о них.
 
Последнее редактирование:
Привет. Тебе нужно использовать maven-shade-plugin для того, чтобы вшить библиотеку javax-mail в свой плагин. Вставь этот код к себе в pom.xml:
XML:
<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.2.4</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <createDependencyReducedPom>false</createDependencyReducedPom>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
Удачи :D
 
Последнее редактирование модератором:
Назад
Сверху Снизу