
我并不打算讲怎么将一个下载的jar库加入到local repository中,我们将自己建立一个jar库,比如我们有一个最简单的HelloWorld类HelloWorld.java:
package com.thoughtworks.davenkin
public class HelloWorld
{
public void sayHello()
{
System.out.println("Hello, World")
}
}
我们希望将HelloWorld.java打包成jar文件安装在Maven的local repository中以便其它程序使用。
编译打包hello-world.jar后,为了符合Maven的规定,需要给hello-world.jar一个版本号,故将hello-world.jar改名为hello-world-1.0.jar,此后便可以用mvn来安装此包到Maven的local repository中了:
mvn install:install-file -Dfile=path/to/hello-world-1.0.jar -DgroupId=com.thoughtworks.davenkin -DartifactId=hello-world -Dversion=1.0 -Dpackaging=jar
其中,-Dfile选项应给出需要安装jar文件的路径,在Linux/Mac下,jar文件将被安装在以下目录:
~/.m2/repository/com/thoughtworks/davenkin/hello-world/1.0/hello-world-1.0.jar
现在,我们的hello-world-1.0.jar便可以被其它Maven项目所使用了,为此逗慎创建一个Maven工程:
mvn archetype:generate-DgroupId=com.thoughtworks.davenkin.demo -DartifactId=helloworld-demo -DarchetypeArtifactId=maven-archetype-quickstart -Dversion=1.0
此时将在当前目录下自动创建helloworld-demo子目录,切换到helloworld-demo目录,删除已有的App.java,并创建自己的Main.java文件
rm src/main/java/com/thoughtworks/davenkin/demo/App.java
touch src/main/java/com/thoughtworks/davenkin/demo/Main.java
将以下内容加入到Main.java文件中:
package com.thoughtworks.davenkin.demo
import com.thoughtworks.davenkin.HelloWorld
public class Main
{
public static void main(String[] args)
{
new HelloWorld().sayHello()
}
}
接下来是最重要的一步,修改pom.xml文件以加入对HelloWorld类的依赖:
<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">
<modelVersion>4.0.0</modelVersion>
<groupId>com.thoughtworks.davenkin.demo</groupId>
<artifactId>demo</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>demo</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.thoughtworks.davenkin</groupId>
<artifactId>hello-world</artifactId>
<version>1.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
以上高亮部分为我们手动加入的,Maven会根据artifactId和version拼出所依赖jar包的名字,即artifactId-version.jar,对于我们的例子,artifactId为hello-world,version为1.0,所得到的jar文件为hello-world-1.0.jar,这也是为什么我们在一开始时需要将hello-world.jar的名字改为hello-world-1.0.jar的原因。
接下来便可以编译我们的Main.java了:
mvn compile
编译结果会放在target文件夹下。
到现在,我们的例子便可以运行了,在工程根目录下(该例为hello-world-demo)输入以下命令:
mvn exec:java -Dexec.mainClass="com.thoughtworks.davenkin.demo.Main"
在笔者的机器上输出为:
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building demo 1.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>>exec-maven-plugin:1.2.1:java (default-cli) @ demo >>>
[INFO]
[INFO] <<<exec-maven-plugin:1.2.1:java (default-cli) @ demo <<<
[INFO]
[INFO] --- exec-maven-plugin:1.2.1:java (default-cli) @ demo ---
Hello, World
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.423s
[INFO] Finished at: Wed Feb 15 21:33:47 CST 2012
[INFO] Final Memory: 5M/81M
[INFO] ------------------------------------------------------------------------
以上高亮部分即为我们期望的程序输出,当然你也可以用传统的java命令来运行,此时需要将hello-world-1.0.jar加入到classpath中,输入:
java -cp ~/.m2/repository/com/thoughtworks/davenkin/hello-world/1.0/hello-world-1.0.jar:target/classes/ com.thoughtworks.davenkin.demo.Main
输出为:
Hello, World
打包jar一共有两种方式第一种:
快捷键(Ctrl+Alt+Shift+S)打开项目的Project Structure。在Artifacts创建
接着,指定main class,如下:
最后,得到创建得到的artifacts
注:这里可以通过“+”或者“-”选择那些需要打入artifacts的第三方jar文件,也可以将maven中的包都导入进来;
在菜单栏目选Build,最后一栏Build Artifacts
最后,在出现的窗口创建
得到打包结果:
去执行
一般会执行成功如果执行出错查看是什么错误排查即可;
maven打包的步骤:
[图片上传中...(image-784a61-1649340624814-14)]
maven 默认打包插件,用来创建 project jar
pom.xml配置如下:
2.1 maven-jar-plugins 无依赖第三方jar的打包
maven 默认打包插件,用来创建 project jar
pom.xml配置如下:
运行:在target中找到打包出来的xxx.jar包,运行java -jar xxx.jar即可,但是如果程序有依赖其他包,比如程序依赖jdbc去查询db,这时候再执行就会出现找不到jdbc依赖,因为我们并没有将依赖包打进去。
支持定制化打包方式,更多是对项目目录的重新组装。以下方式用的比较少,因为我们依赖的jar,也会打进到我们最终生成的jar中,会导致一个jar文件过大,拿核而且如果要给第三方使用,最好给一个纯净的。
pom.xml配置如下:
支启首持定制化打包方式,更多是对项目目录的重新组装。在2.2基础上,我们还可以利用assembly,将我们依赖的jar归类,打包成一个zip。发布项目的时候,将zip包copy到服务器上,直接unzip xxx.zip,里面包含要运行的jar以及依赖的lib,还有配置的config文件,还可以包括执行脚本,可以直接启动服务。
maven-assembly-plugin还需要配置一个assembly.xml文件,用于过滤不悄敏数必要的第三方jar包文件,或者确定自己编译的项目文件路径、项目的启动脚本文件目录,打包的类型格式zip或者tar.gz等。
assembly.xml文件内容为:
打包结果为:
用来打可执行包,包含依赖,以及对依赖进行取舍过滤。使用这种方式打出来的是揉合在一起,成为一个jar文件。这种打包方式的优点是可以利用transformer把第三方jar相同的配置文件组合成一个文件,如reference.conf文件等等。
pom.xml配置如下:
打包结果:
该插件主要用于项目maven编译打包时,跳过单元测试,pom.xml配置为:
文献:
IntelliJ IDEA自身以及maven项目打包方式(单模块) - 牧梦者 - 博客园 (cnblogs.com)
java 项猜枝兆目中,可以直接引用本地包maven中,需要先安装到本地穗租库
mvn install:install-file -DgroupId=包名 -DartifactId=项目名 -Dversion=版本号搭谨 -Dpackaging=jar -Dfile=jar文件所在路径
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)