На самом деле, я думаю, что ответ, данный в вопросе , который вы упомянули, просто неверно ( ОБНОВЛЕНИЕ - 20101106: кто-то исправил это, это ответ относится к версии, предшествующей редактированию ), и это хотя бы частично объясняет, почему у вас возникают проблемы.
Он генерирует два файла jar в logmanager / target: logmanager-0.1.0.jar и logmanager-0.1.0-jar-with-dependencies.jar.
Первый - это JAR модуля logmanager, сгенерированного во время фазы package
с помощью jar:jar
(поскольку модуль имеет упаковку типа jar
). Второй - это сборка, сгенерированная assembly:assembly
и должна содержать классы из текущего модуля и его зависимостей (если вы использовали дескриптор jar-with-dependencies
).
Я получаю сообщение об ошибке, когда дважды щелкаю первую банку:
Could not find the main class: com.gorkwobble.logmanager.LogManager. Program will exit.
Если вы применили предложенную конфигурацию ссылки, опубликованной в качестве ссылки, вы настроили подключаемый модуль jar для создания исполняемого артефакта, что-то вроде этого:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.gorkwobble.logmanager.LogManager</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
Так что logmanager-0.1.0.jar
действительно исполняемый файл, но 1. это не то, что вам нужно (потому что он не имеет всех зависимостей) и 2. он не содержит com.gorkwobble.logmanager.LogManager
(это то, что говорит ошибка, проверьте содержимое банки).
Немного другая ошибка, когда я дважды щелкаю по jar-with-dependencies.jar:
Failed to load Main-Class manifest attribute from: C:\EclipseProjects\logmanager\target\logmanager-0.1.0-jar-with-dependencies.jar
Опять же, если вы настроили сборочный плагин как предложено, у вас есть что-то вроде этого:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
При этой настройке logmanager-0.1.0-jar-with-dependencies.jar
содержит классы из текущего модуля и его зависимостей, но, согласно ошибке, его META-INF/MANIFEST.MF
не содержит Main-Class
запись (скорее всего, она не та же MANIFEST.MF, как в logmanager-0.1.0.jar). Jar на самом деле не исполняемый файл, что опять-таки не то, что вы хотите.
Итак, я предлагаю удалить элемент configuration
из плагина maven-jar-plugin и настроить плагин maven-assembly-следующим образом:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.2</version>
<!-- nothing here -->
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-4</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>org.sample.App</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
Конечно, замените org.sample.App
классом, который вы хотите выполнить. Небольшой бонус, я привязал assembly:single
к фазе package
, так что вам больше не нужно запускать assembly:assembly
. Просто запустите mvn install
, и сборка будет произведена во время стандартной сборки.
Итак, обновите ваш pom.xml, указав приведенную выше конфигурацию, и запустите mvn clean install
. Затем перейдите в каталог target
и попробуйте снова:
java -jar logmanager-0.1.0-jar-with-dependencies.jar
Если вы получили сообщение об ошибке, обновите свой вопрос и опубликуйте содержимое файла META-INF/MANIFEST.MF
и соответствующую часть вашего pom.xml
(части конфигурации плагинов). Также, пожалуйста, опубликуйте результат:
java -cp logmanager-0.1.0-jar-with-dependencies.jar com.gorkwobble.logmanager.LogManager
, чтобы продемонстрировать, что он работает нормально в командной строке (независимо от того, что говорит eclipse).
EDIT: для Java 6 вам необходимо настроить плагин maven-compiler-plugin. Добавьте это к вашему pom.xml:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>