maven 项目引用另一个maven项目生成的jar库(该库在本地maven库)

本文介绍了如何在Maven项目中引用另一个通过`mvn clean install`生成并存放在本地仓库的jar包。当新建的useHelloWorld项目引用hello world项目时,遇到找不到类的问题。解决方案是在pom.xml中配置maven-shade-plugin,生成可执行jar,避免需要手动指定classpath。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在别的项目中使用通过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 编译打包
再次执行如下:成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值