Проблемы с запуском исполняемого файла jar с зависимостями - PullRequest
4 голосов
/ 28 марта 2012

Эй, я работал над проектом, который я хочу запускать как исполняемый файл из командной строки.Мне удалось создать банку с зависимостями, используя сборку Mavens: одна команда.Мой пом выглядит так.

<build>
    <plugins>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>org.openmetadata.main.OmadUpdate</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
        </plugin>
    </plugins>
</build>

Сборка прошла успешно и создает файл jar omad-update-0.0.1-SNAPSHOT-jar-with-dependencies.jar.Я иду в целевую папку моих проектов в командной строке и набираю

java -jar omad-update-0.0.1-SNAPSHOT-jar-with-dependencies.jar

Я также пытался

java -cp omad-update-0.0.1-SNAPSHOT-jar-with-dependencies.jar org.openmetadata.main.OmadUpdate

К сожалению, в каждом случае мне дают java.lang.NoClassDefFoundError: org/ openmetadata / Основной / OmadUpdate.Я в замешательстве, потому что знаю, что мой главный класс находится в пакете org.openmetadata.main, но пока не найден.Я нахожу это особенно запутанным, потому что в моем помете я указываю этот класс как мой основной класс.Я попытался изменить имя основного класса на src.main.java.org.openmetadata.main.OmadUpdate и просто OmadUpdate, но ни один из них, похоже, не дал эффекта.Спасибо за любую помощь заранее.

Ответы [ 3 ]

2 голосов
/ 28 марта 2012

Я не вижу записи Class-Path в манифесте выше, но в вашем очень длинном имени файла упоминаются зависимости. Если в этом файле jar есть файлы jar, от которых зависит ваша программа, вы должны перечислить их в разделе Class-Path. См. Добавление классов в путь к классу JAR-файла для получения более подробной информации.

0 голосов
/ 30 марта 2012

Я наконец смог заставить это работать, добавив следующий код в мой pom.

    <build>
    <plugins>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>org.openmetadata.omadupdate.OmadUpdate</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
              <execution>
                <id>make-assembly</id> <!-- this is used for inheritance merges -->
                <phase>package</phase> <!-- bind to the packaging phase -->
                <goals>
                  <goal>single</goal>
                </goals>
              </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Без тега выполнения в pom вместе с его дочерними элементами в jar будут добавлены только зависимости maven, а классы самого проекта не будут добавлены.

0 голосов
/ 29 марта 2012

Другим вариантом может быть использование onejar-maven-plugin .К сожалению, страница Использование немного скудна, но плагин делает то, что должен при правильной настройке.

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