외부 패키지에 의존하지 않고 Maven은 어떻게 실행 가능한 JAR을 생성 할 수 있습니까?
POM에 참조가 포함되어 있지 않으면 POM에 maven-jar-plugin 추가하십시오.
솔루션 프로세스
새 프로젝트, 하나의 기본 기능 클래스 : xixi.java, output Xixi Say: hello
POM은 다음과 같이 구성됩니다
<groupid> com.paxi </groupid> <artifactid> xixi </artifactid> <bersion> 1.0-snapshot </version> <packaging> jar </packaging> <name> xixi </name> <url> http://maven.apache.org </url> <properties> <project.build.sourceencoding> utf-8 </project.build.sourceencoding> </properties>
JAR 패키지 생성을 위해 mvn clean install 실행 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-version : Plexus Archiverbuilt-by : Paxicreated-by : Apache Maven 3.3.3build-jdk : 1.8.0_121
POM에 플러그인 maven-jar-plugin 추가하십시오
<빌드> <플러그인> <grugin> org.apache.maven.maven.maven.plugins </groupid> <artifactid> maven-jar-plugin </artifactid> <bersion> 3.1.0 </version> <아카이브> <manifest> <mainclass> com.paxi.xixi </mainclass> </maniflass> </플러그인> </플러그인> </빌드>
성공적인 출력을 실행하십시오
java -jar xixi-1.0-snapshot.jar
XIXI Say : 안녕하세요
그런 다음 압축 압축 매니페스트 .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-Dependency-Plugin 및 Maven-Jar-Plugin을 사용해야합니다.
솔루션 프로세스
Apache-Commons 패키지 만 POM에만 추가하십시오
<groupid> com.paxi </groupid> <artifactid> xixi </artifactid> <bersion> 1.0-snapshot </version> <packaging> jar </packaging> <name> xixi </name> <url> http://maven.apache.org </url> <properties> <project.build.sourceencoding> utf-8 </project.build.sourceencoding> </properties> <pectioniles> <pectionency> <groupid> org.apache.commons </groupid> <artifactid> commons-lang3 </artifactid> <bersion> 3.7 </dependency> </dependence>
코드의 공통 패키지에서 클래스를 사용하십시오.
public static void main (String [] args) {문자열 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
at java.net.urlclassloader.findclass (urlclassloader.java:381)
at java.lang.classloader.loadclass (classloader.java:424)
at Sun.Misc.launcher $ AppClassLoader.LoadClass (Launcher.java:331)
at Java.lang.classloader.loadclass (classloader.java:357)
... 1 더
POM에 플러그인을 추가하십시오
<빌드> <플러그인> <groupid.apache.maven.plugins </groupid> <artifactid> maven-jar-plugin </artifactid> <bersion> 3.1.0 </version> <crigive> <atchive> <dadclasspath> true </addclasspath> <mainclass> com.paxi.xix. <classpathPrefix> libs/</classpathprefix> </manifest> </archive> </configuration> </plugin> <plugin> <groupid> org.apache.maven.plugins </groupId> <artifactid> maven-dependent-Plugin </artifactid> 3.1 </version> <execution> <execution> <execution> <ID> 카피-의존성 </id> <case> 패키지 </id> <case> goving> <Goal> Copy-Dependents </gover-dependents </gover-dependents </gover-dependents </buck </govent> <configuration> <outputDirectory> $ {project.build.directory}/libs </outputDirectory> </configuration> </execution> </plugin> </build> </build> </build>다시 실행하십시오
java -jar xixi-1.0-snapshot.jarxixi say : 안녕하세요
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
POM의 종속성뿐만 아니라 3 자 항아리도 사용합니다. Maven은 어떻게 실행 가능한 항아리를 생성합니까?
컴파일 프로세스에는 컴파일 플러그인 maven-compiler-plugin 의 수정이 필요합니다. 실행할 때는 명령을 실행하려면 3 자 항아리의 디렉토리를 추가해야합니다.
java -jar -djava.ext.dirs = lib/ target/ xixi-1.0-snapshot.jarxixi say : hellopapa says : 안녕하세요
컴파일 및 해상도 프로세스
테스트 코드는입니다
public static void main (String [] args) {문자열 words = "xixi say : hello"; if (stringUtils.isnotblank (Words)) {System.out.println (Words); } papa.say (); }MVN 명령을 사용하여 오류를 실행하십시오
[오류] 목표 org.apache.maven.plugins : maven-compiler-plugin : 3.1 : project xixi에서 컴파일 (기본 컴파일) : 컴파일 실패
xixi/src/main/java/com/paxi/xixi.java : [15,9] 기호를 찾을 수 없습니다
POM에 컴파일 플러그인을 추가하십시오
<Plugin> <groupId> org.apache.maven.plugins </groupid> <ArtifactId> Maven-Compiler-Plugin </artifactid> <bersion> 3.1 </version> <configuration> <compilerargs> <arg> -djava.ext.dirs = lib/</compiler>
패키지 실행
java -jar target/xixi-1.0-snapshot.jarxixi say : helloexception에서 helloexception "main"java.lang.noclassdeffounderror : com/paxi/papa at com.paxi.xixi.main (xixi.java:15) : java.lang.classemence : com.paxectement : com.paxectement : com.paxecement : com.paxecement : com.paxixi.main : com.paxi.xixi.main. java.net.urlclassloader.findclass (urlclassloader.java:381)의 java.lang.classloader.loadclass (classloader.java:424)의 sun.misc.launcher $ appclassloader.loadclass (launcher.java:331) at java.lang.classloader.loadclass (classloader.java:357) ... 1 더
결과를 얻으려면 매개 변수를 추가하십시오
java -jar -djava.ext.dirs = lib/ target/ xixi-1.0-snapshot.jarxixi say : hellopapa says : 안녕하세요
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.