外部パッケージに頼らずに、Mavenは実行可能な瓶をどのように生成できますか?
POMに参照が含まれていない場合は、 maven-jar-plugin POMに追加するだけです。
ソリューションプロセス
新しいプロジェクトを作成する、1つのメイン関数クラスのみ:xixi.java、output Xixi Say: hello
POMはとして構成されています
<GroupId> com.paxi </groupId> <artifactid> xixi </artifactid> <version> 1.0-snapshot </version> <packaging> jar </packaging> <name> xixi </name> <url> http://maven.apache.org </url> <proprities> <project.build.sourceencoding> utf-8 </project.build.sourceencoding> </properties>
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-version:plexus archiverbuilt-by:paxicreated-by:apache maven 3.3.3build-jdk:1.8.0_121
POMにプラグインmaven-jar-pluginを追加します
<build> <プラグイン><プラグイン> <groupId> org.apache.maven.plugins </groupid> <artifactid> maven-jar-plugin </artifactid> <バージョン> 3.1.0 </version> <configuration </plugin> </plugins> </build>
成功した出力を実行します
Java -jar xixi-1.0-snapshot.jar
Xixiは言う:こんにちは
次に、解凍された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を使用する必要があります。
ソリューションプロセス
POMにApache-Commonsパッケージのみを追加します
<GroupId> com.paxi </groupId> <artifactid> xixi </artifactid> <version> 1.0-snapshot </version> <packaging> jar </packaging> <name> xixi </name> <url> http://maven.apache.org </url> <proprities> <project.build.sourceencoding> utf-8 </project.build.sourceencoding> </properties> <dependencies> <dependency> <groupid> org.apache.commons> <artifactid> commons-lang3 </artifactid> <バージョン>
コードの一般的なパッケージでクラスを使用する
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の例外
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にプラグインを追加します
<build> <blagin> <groupid> org.apache.maven.plugins </groupid> <artifactid> maven-jar-plugin </artifactid> <version> 3.1.0 </version> <configuration> <classpathprefix> libs/</classpathprefix> </manifest> </archive> </configuration> </configuration> </plugin> <groupid> org.apache.maven.plugins </groupid> <artifactid> maven-dopent-plugin </artifactid> <バージョン> 3.1.1 < <id>コピー依存者</id> <phase>パッケージ</phase> <goal> <goal> copy-dependents </goal> </goal> <configuration> <outputdirectory> $ {project.build.directory}/libs </outputdirectory> </configuration> </execution>もう一度実行します
Java -jar xixi-1.0-snapshot.jarxixi言う:こんにちは
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-class:com.xixi.xixi.xixi
POMの依存関係だけでなく、3パーティの瓶も使用します。 Mavenはどのように実行可能な瓶を生成しますか?
コンパイルプロセスでは、コンピレーションプラグインmaven-compiler-pluginの変更が必要です。実行中は、コマンドを実行するために3パーティの瓶のディレクトリを追加する必要があります。
Java -jar -djava.ext.dirs = lib/ target/ xixi -1.0 -snapshot.jarxixi say:hellopapa says:hello
編集と解決プロセス
テストコードはです
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にコンパイルプラグインを追加します
<プラグイン> <groupId> org.apache.maven.plugins </groupid> <artifactid> maven-compiler-plugin </artifactid> <version> 3.1 </version> <configuration> <arg> -djava.ext.dirs = lib/</arg> </compilerargs> </compilerargs>
パッケージの実行
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) java.net.urlclassloader.findclass(urlclassloader.java:381)at java.lang.classloader.loadclass(classloader.java:424)at sun.misc.launcher $ appclassloader.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:hello
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。