tools.jar не упакован в пакет maven. Получение java .lang.NoClassDefFoundError: com / sun / tools / javadoc / Main - PullRequest
0 голосов
/ 23 апреля 2020

Я создал проект maven, в который нужно добавить tools.jar. Я добавил jar в папку lib и включил в pom следующее: xml.

<dependency>
            <groupId>com.sun</groupId>
            <artifactId>tools</artifactId>
            <scope>system</scope>
            <version>1.8.0</version>
            <systemPath>${project.basedir}\src\lib\tools.jar</systemPath>
</dependency>

Когда также добавил следующий плагин для создания исполняемого jar для проекта.

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>umlparser.Main</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>

Я собрал jar, используя "сборку чистого пакета mvn: single". Это создало исполняемый файл jar с именем myproject-jar-with-dependencies.

Но когда я пытаюсь запустить jar файл с java -jar не может получить tools.jar. Я получаю следующую ошибку

Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/tools/javadoc/Main
        at org.umlgraph.doclet.UmlGraph.main(UmlGraph.java:70)
        at umlparser.Main.main(Main.java:19)
Caused by: java.lang.ClassNotFoundException: com.sun.tools.javadoc.Main
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 2 more

Но когда я экспортирую его как готовый jar-файл из затмения, он работает как положено. В чем проблема с пакетом Maven? Я что-то здесь упускаю?

РЕДАКТИРОВАТЬ

Я попытался импортировать зависимость tools.jar из java_home вместо пути проекта.

<dependency>
            <groupId>com.sun</groupId>
            <artifactId>tools</artifactId>
            <version>1.8.0_241</version>
            <scope>system</scope>
            <systemPath>${java.home}/../lib/tools.jar</systemPath>
        </dependency>

Тем не менее, я получаю ту же проблему.

Примечание: tools.jar не используется в моей программе. Он используется одним из включенных мной jar-файлов - «UMLGraph.jar».

1 Ответ

0 голосов
/ 23 апреля 2020

Добавленная вами зависимость com.sun:tools имеет область действия system. Зависимости с provided и system областями не будут включены в такие упакованные артефакты.

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

При этом, вы, вероятно, могли бы попытаться использовать dependencySet с scope из system, но я бы на самом деле не советовал (даже если он добился цели).

I Я предполагаю, что в системе, где вы используете этот jar, у вас просто нет JDK на вашем PATH, и вместо этого у вас есть только JRE. Если вы исправите это, вам не придется совершать какие-либо нетрадиционные действия.

...