java 用java运行期拉取maven包了 为什么lib里还有包

JAVA语言中发布maven项目的三种方式:直接运行、jar包方式、war包方式等实例讲解

0

摘要:本文主要向大家介绍了JAVA语言中发布maven项目的三种方式:直接运行、jar包方式、war包方式等实例讲解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

本文主要向大家介绍了JAVA语言中发布maven项目的三种方式:直接运行、jar包方式、war包方式等实例讲解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

java中发布maven项目的三种方式:直接运行、jar包方式、war包方式等实例讲解

    其中,因为java -jar 不接收classpath参数(或者说-classpath对它不起作用),因此必须把所有依赖的文件都打到一个jar里(比如 One jar)。这样就存在一个问题:修改这个独立应用程序的配置文件会很不方便。(ps:当前路径是它的类路径)。


    所以除非不用配置信息或从命令行指定配置信息,更好的方式应该是使用java -cp(即-classpath)的方式,并从类路径中读取配置文件。

    那么,一个独立应用程序的目录结构可以是如下形式:


    2、把这个独立应用程序所依赖的配置文件(而且是可能需要修改的)放在与jar包同级目录下。

注:类路径中,最好把配置文件的路径放在jar文件的路径之前,因为我们实际项目中遇到过:有的jar包中包含同名配置文件把我们自己的配置文件给覆盖了的情况。改一下在classpath中的顺序,这样就可以让程序优先使用我们的配置文件。

    这样,方便修改配置的独立应用程序的执行方法已经出来了。下面的问题是,那些依赖的jar包,以及配置文件谁来拷出来?用maven来做这件事是最方便不过的了。


    下面我们要做的就是:在使用maven打包时,把程序依赖的jar包都拷出来,配置文件拷出来。同时,因为要使用外部的配置文件,所以要避免把配置文件打到jar包里。pom里的配置如下:

上面有几个需要特别说明的地方:
1、phase节点,表示要在什么阶段执行这个任务,比如

2、最后一个plugin节点中的classifier节点,表示这种方式(排除了配置文件)打出的jar包通过什么来和别的jar包区分开,我设的值是lib,这样打出来的包名就是:xxxx-lib.jar
3、最后一个plugin节点中的:

我没这么写,是因为我还有其它的.xml文件不需要放在外面。

到这里,用maven打独立应用程序的jar包的方式就讲解完了。在这再补充一个小知识。

如果你有多个工程,统一用一个父pom来管理(这些工程的pom都继承自父pom),如果有的工程中使用了resources插件,你在使用maven打包时,会出现错误,maven命令无法成功执行。

解决的办法是在父pom中加入:


我要回帖

更多关于 java运行期拉取maven包 的文章

 

随机推荐