Не полагаясь на какой -либо внешний пакет, как Maven может генерировать исполняемую банку?
Если POM не содержит никаких ссылок, просто добавьте maven-jar-plugin в POM.
Процесс решения
Создайте новый проект, только один основной функциональный класс: xixi.java, вывод Xixi Say: hello
POM настроен как
<groupId> com.paxi </GroupId> <artifactid> xixi </artifactid> <sersive> 1.0-snapshot </version> <badaging> jar </packaging> <mame> xixi </name> <url> http://maven.apache.org </url> <properties> <project.build.sourceencoding> utf-8 </project.build.sourceencoding> </свойства>
Выполните mvn clean install , чтобы генерировать пакет JAR xixi-1.0-SNAPSHOT.jar, выполнить команду JAR и выполнить ошибку обратной связи
java -jar xixi-1.0-snapshot.jarxixi-1.0-snapshot.jar не имеет основного атрибута манифеста
Распаковывать jar jar xvf xixi-1.0-snapshot.jar для просмотра соответствующего файла manifest.mf
Cat Meta-Inf/manifest.mfmanifest-version: 1.0archiver-версия: сплетение Archiverbuilt-By: PaxicReated-By: Apache Maven 3.3.3build-JDK: 1.8.0_121
Добавить плагин maven-jar-plugin в pom
<buld> <blicins> <bricin> <groupid> org.apache.maven.plugins </GroupId> <ArtifactId> maven-jar-plugin </artifactid> <sersion> 3.1.0 </version> <ponfiguration> <Archive> <manifest> <bainclass> com.paxi. </plugin> </plugins> </build>
Выполнить успешный вывод
java -jar xixi-1.0-snapshot.jar
Xixi скажи: привет
Затем проверьте файл Decompresed Manifest.mf как
Cat Meta-Inf/manifest.mfmanifest-version: 1.0built-by: paxicreated-by: apache maven 3.3.3build-jdk: 1.8.0_121main-class: com.paxi.xixi // Добавлено
Добавить зависимости в POM, как Maven генерирует исполняемые банки?
Вам нужно использовать плагины Maven-зависимость-плугин и Maven-Jar-Plugin.
Процесс решения
Только добавьте пакет Apache-Commons в POM
<groupId> com.paxi </GroupId> <artifactid> xixi </artifactid> <sersive> 1.0-snapshot </version> <badaging> jar </packaging> <mame> xixi </name> <url> http://maven.apache.org </url> <properties> <project.build.sourceEncoding> UTF-8 </Project.Build.sourceEncoding> </свойства> <Depertiencies> <deyedency> <groupid> org.apache.commons </GroupId> <artifactid> commons-lang3 </artifactid> <serse> 3.7 </version> </зависимость> </Зависимость> </artifactid> <serse> 3.7
Используйте класс в общем пакете в коде
public static void main (string [] args) {string words = "xixi Say: hello"; if (stringutils.isnotblank (words)) {System.out.println (words); }}Произошла ошибка после упаковки
java -jar xixi-1.0-snapshot.jar
Исключение в потоке "Main" java.lang.noclassdeffounderror: org/apache/commons/lang3/stringutils
at com.paxi.xixi.main (xixi.java:11)
Вызвано: java.lang.classnotfoundexception: org.apache.commons.lang3.stringutils
на java.net.urlclassloader.findclass (urlclassloader.java:381)
на java.lang.classloader.loadclass (classloader.java:424)
на sun.misc.launcher $ appclassloader.loadclass (Launcher.java:331)
на java.lang.classloader.loadclass (classloader.java:357)
... еще 1
Добавить плагины в POM
<buld> <blicin> <groupid> org.apache.maven.plugins </GroupId> <ArtifactId> maven-jar-plugin </artifactid> <sersive> 3.1.0 </version> <ponfiguration> <Archive> <manifest> <ddclasspath> true </addclasspath> <dianclass> com.paxi. <ClassPathPrefix> libs/</classpathprefix> </manifest> </archive> </configuration> </placin> <blicin> <groupid> org.apache.maven.plugins </GroupId> <Artifactid> maven-vencient-plugin </artifactid> <seriate> 3.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1. <id>copy-dependents</id> <phase>package</phase> <goals> <goal>copy-dependents</goal> </goals> <configuration> <outputDirectory> ${project.build.directory}/libs </outputDirectory> </configuration> </execution> </executions> </plugin> </plugins> </build>Беги снова
java -jar xixi-1.0-snapshot.jarxixi Скажи: Привет
Manifest.mf -файл
Cat Meta-Inf/manifest.mfmanifest-version: 1.0build-by: paxiclass-path: libs/commons-lang3-3.7.jarcreated-by: apache maven 3.3.3build-jdk: 1.8.0_121main-class: com.paxi.xixi
Он использует не только зависимости в POM, но и трехпартийные банки. Как Maven генерирует исполняемые банки?
Процесс компиляции требует модификации плагина компиляции maven-compiler-plugin . При запуске вам нужно добавить каталог трехпартийных банок для выполнения команд.
java -jar -djava.ext.dirs = lib/ target/ xixi -1.0 -snapshot.jarxixi Скажи: Hellopapa говорит: Привет
Компиляция и процесс разрешения
Тестовый код
public static void main (string [] args) {string words = "xixi Say: hello"; if (stringutils.isnotblank (words)) {System.out.println (words); } Papa.say (); }Используйте команду MVN, чтобы выполнить ошибку
[Ошибка] Не удалось выполнить цель org.apache.maven.plugins: maven-compiler-plugin: 3.1: компиляция (по умолчанию-компиляции) на проекте Xixi: сбой компиляции
xixi/src/main/java/com/paxi/xixi.java: [15,9] Символ не найден
Добавить плагин компиляции в POM
<blicin> <groupid> org.apache.maven.plugins </GroupId> <ArtifactId> maven-compiler-plugin </artifactid> <sersive> 3.1 </version> <ponivuration> <compilerargs> <gard> -djava.ext.dirs = lib/</arg> </compilerargs> </plugraturation>
Выполнение пакета
java -jar target/xixi-1.0-snapshot.jarxixi Скажи: helloException in thread "main" java.lang.noclassdeffounderror: com/paxi/papa at com.paxi.xixi.main (xixi.java:15) вызвано: java.lang. java.net.urlclassloader.findclass (urlclassloader.java:381) по адресу java.lang.classloader.loadclass (classloader.java:424) на sun.misc.launcher $ java.lang.classloader.loadclass (classloader.java:357) ... еще 1
Добавьте параметры, чтобы получить результат
java -jar -djava.ext.dirs = lib/ target/ xixi -1.0 -snapshot.jarxixi Скажи: Hellopapa говорит: Привет
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.