maven 項目引用另一個maven項目生成的jar庫(該庫在本地maven庫)

在別的項目中使用通過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 編譯打包
再次執行如下:成功

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章