Sem confiar em nenhum pacote externo, como o Maven pode gerar um frasco executável?
Se o POM não contiver referências, basta adicionar maven-jar-plugin ao POM.
Processo de solução
Crie um novo projeto, apenas uma classe de função principal: xixi.java, saída Xixi Say: hello
O POM está configurado como
<GrupId> com.paxi </proupId> <TorfactId> xixi </ArtifactId> <versão> 1.0-snapshot </version> <bacaging> jar </acheging> <name> xixi </name> <url> http://maven.apache.org </url> <url> http://maven.apache.org </url> <procomerts> )
Execute mvn clean install para gerar o pacote JAR xixi-1.0-SNAPSHOT.jar, executar o comando jar e executar erros de feedback
java -jar xixi-1.0-snapshot.jarxixi-1.0-snapshot.jar não tem atributo manifesto principal
Descompacte o jar jar xvf xixi-1.0-snapshot.jar para ver o manifesto de arquivo correspondente.mf
CAT meta-inf/manifest.mfmanifest-version: 1.0chiver-version: Plexus Archiverbuilt-by: paxicreated-by: apache maven 3.3.3build-jdk: 1.8.0_121
Adicionar plug- maven-jar-plugin
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.1.0</version> <configuration> <archive> <manifest> <mainClass>com.paxi.Xixi</mainClass> </manifest> </archive> </configuration> </plugin> </flugins> </fruct>
Execute a saída bem -sucedida
java -Jar xixi-1.0-snapshot.jar
XIXI Diga: Olá
Em seguida, verifique o arquivo de manifesto descompactado.mf como
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 // Adicionado
Adicionar dependências no POM, como o Maven gera frascos executáveis?
Você precisa usar plug-ins-dependência-plugina e plugina maven-jar.
Processo de solução
Adicione apenas o pacote Apache-Commons ao POM
<GrupId> com.paxi </proupId> <TorfactId> xixi </ArtifactId> <versão> 1.0-snapshot </version> <bacaging> jar </acheging> <name> xixi </name> <url> http://maven.apache.org </url> <url> http://maven.apache.org </url> <procomerts> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.7</version> </dependency> </dependencies>
Use uma classe no pacote comum no código
public static void main (string [] args) {string words = "xixi say: hello"; if (stringUtils.isnotblank (palavras)) {System.out.println (palavras); }}Ocorreu um erro após a embalagem
java -Jar xixi-1.0-snapshot.jar
Exceção no thread "Main" java.lang.noclassDeffoundError: org/apache/commons/lang3/stringutils
em com.paxi.xixi.main (xixi.java:11)
Causado por: java.lang.classnotfoundException: org.apache.commons.lang3.stringutils
em java.net.urlclassloader.findclass (urlclassloadler.java:381)
em java.lang.classloader.loadclass (classloader.java:424)
em Sun.misc.launcher $ appclassload.loadclass (lançador.java:331)
em java.lang.classloader.loadclass (classloader.java:357)
... mais
Adicione plugins em pom
<build> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.1.0</version> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <mainClass>com.paxi.Xixi</mainClass> <CLEUSTPHPREFIX> libs/</s ClassPathPrefix> </manifesto> </chives> </figuration> </plugin> <lugin> <plugid> org.apache.maven.plugins </groupid> <stifactid> maven-dependent-plagin </artifactId> <versão> 3.1.1.1.1.1.1.1.1.1.1.1.1.1.1s.1. <di> cópia-dependentes </dod> <fase> pacote </shase> <gestes> <Goal> cópia-dependentes </as Goal> </metas> <figuration> <putputDirectory> $ {Project.build.directory}/libs </outputdirectory> </figuration> </execution> </plugin> </plugin> </pluginCorrer novamente
java -Jar xixi-1.0-snapshot.jarxixi Diga: Olá
Arquivo manifest.mf é
CAT meta-inf/manifest.mfmanifest-version: 1.0built-by: paxiclass-path: Libs/Commons-Lang3-3.7.Jarcreated-by: Apache Maven 3.3.3Build-jdk: 1.8.0_121Main: com.paxi.xixi
Não apenas usa dependências no POM, mas também frascos de três partes. Como o Maven gera frascos executáveis?
O processo de compilação requer modificação do plug-in de compilação maven-compiler-plugin . Ao executar, você precisa adicionar um diretório de frascos de três partes para executar os comandos.
java -jar -djava.ext.dirs = lib/ target/ xixi -1.0 -snapshot.jarxixi Say: hellopapa diz: Olá
Processo de compilação e resolução
O código de teste é
public static void main (string [] args) {string words = "xixi say: hello"; if (stringUtils.isnotblank (palavras)) {System.out.println (palavras); } Papa.say (); }Use o comando MVN para executar o erro
[Erro] falhou ao executar o objetivo org.apache.maven.plugins: maven-compiler-plugin: 3.1: compile (padrão-compile) no projeto xixi: falha de compilação
xixi/src/main/java/com/paxi/xixi.java: [15,9] Símbolo não encontrado
Adicione o plugin de compilação ao POM
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <compilerArgs> <arg>-Djava.ext.dirs=lib/</arg> </compilerArgs> </configuration> </plugin>
Execução do pacote
java -jar target/xixi-1.0-SNAPSHOT.jarXixi Say: helloException in thread "main" java.lang.NoClassDefFoundError: com/paxi/Papa at com.paxi.Xixi.main(Xixi.java:15)Caused by: java.lang.ClassNotFoundException: com.paxi.Papa at java.net.urlclassloader.findclass (urlclassloader.java:381) em java.lang.classloader.loadclass (classeLoader.java:424) em sun.misc.launcher $ appcllass.loads (lançador.java:333) java.lang.classloader.loadclass (classloader.java:357) ... 1 mais
Adicione parâmetros para obter o resultado
java -jar -djava.ext.dirs = lib/ target/ xixi -1.0 -snapshot.jarxixi Say: hellopapa diz: Olá
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.