在別的項目中使用通過Maven安裝生成的項目的jar包
首先我在hello world項目中通過mvn clean install 命令構建hello world項目,同時會將這個項目的jar包(hello-world-0.1-SNAPSHOT.jar)複製一份到本地maven倉庫;
那麼其他的maven項目需要引用hello world 項目也就可以直接通過修改pom.xml文件中引用就可以了。
1、mvn archetype:generate -DgroupId=org.vincent.maven -DartifactId=useHelloWorld -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
新建useHelloWorld項目,使用上面的hello world項目,
項目目錄路徑圖:
編輯項目下的pom.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!--所有的Maven項目都必須配置這四個配置項-->
<modelVersion>4.0.0</modelVersion>
<!--groupId指的是項目名的項目組,默認就是包名-->
<groupId>cn.vincent.maven</groupId>
<!--artifactId指的是項目中的某一個模塊,默認命名方式是"項目名-模塊名"-->
<artifactId>hello-world</artifactId>
<!--version指的是版本,這裏使用的是Maven的快照版本-->
<version>0.1-SNAPSHOT</version>
<!-- 最後打包的產品名稱使用這個格式 <artifactId>- <version>. <extension>(比 如:myapp-1.0.jar)。 -->
<name>第一個關於maven的項目 </name>
<properties>
<!-- 指明編譯源代碼時使用的字符編碼,maven編譯的時候默認使用的GBK編碼, 通過project.build.sourceEncoding屬性設置字符編碼,告訴maven這個項目使用UTF-8來編譯 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!--項目要使用到junit的jar包,所以在這裏添加junit的jar包的依賴-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
App.java文件代碼
package org.vincent.maven;
import cn.vincent.maven.helloworld.HelloWorld;//引用hello world項目資源
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
HelloWorld helloworld=new HelloWorld();
System.out.println( "Hello World!"+helloworld.sayHello() );//sayHello函數返回Hello maven
}
}
cd useHelloWorld 進入項目根目錄下
mvn clean compile package 執行清理,編譯,打包 過程。
執行過程如下
但是在執行的時候發生了找不到類的情況,一個可能的情況是 通過 -cp參數指定了用戶類路徑後,類加載器只到 -cp指定的路徑下找尋class文件。而不去maven本地庫中尋找class文件。
通過執行:
java -cp target/useHelloworld-1.0-SNAPSHOP.jar org.vincent.maven.App
發生找不到HelloWorld類情況。
所以需要更改pom.xml 文件,相比原來就是增加了build節點,配置了maven-shade-plugin,使得生產可執行的jar庫。再次執行時候不用指定 -cp參數。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!--所有的Maven項目都必須配置這四個配置項-->
<modelVersion>4.0.0</modelVersion>
<!--groupId指的是項目名的項目組,默認就是包名-->
<groupId>cn.vincent.maven</groupId>
<!--artifactId指的是項目中的某一個模塊,默認命名方式是"項目名-模塊名"-->
<artifactId>hello-world</artifactId>
<!--version指的是版本,這裏使用的是Maven的快照版本-->
<version>0.1-SNAPSHOT</version>
<!-- 最後打包的產品名稱使用這個格式 <artifactId>- <version>. <extension>(比 如:myapp-1.0.jar)。 -->
<name>第一個關於maven的項目 </name>
<properties>
<!-- 指明編譯源代碼時使用的字符編碼,maven編譯的時候默認使用的GBK編碼, 通過project.build.sourceEncoding屬性設置字符編碼,告訴maven這個項目使用UTF-8來編譯 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<!-- 設置編譯插件 -->
<plugin>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-compiler-plugin
</artifactId>
<version>3.5</version>
<configuration>
<source>1.8</source> <!-- 源代碼使用的開發版本 -->
<target>1.8</target> <!-- 需要生成的目標class文件的編譯版本 -->
</configuration>
</plugin>
<!-- 聲明生成可執行的jar文件 -->
<plugin>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-shade-plugin
</artifactId>
<version>2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>cn.vincent.maven.helloworld.HelloWorld</mainClass>
<!-- 配置maven-shade-plugin 插件 爲生成可執行的jar 文件 -->
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<!--項目要使用到junit的jar包,所以在這裏添加junit的jar包的依賴-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
然後通過mvn clean compile package 編譯打包
再次執行如下:成功