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