Mavenassembly打包文件被覆盖问题-创新互联

Maven的assembly插件使用:

成都创新互联公司专注于广阳企业网站建设,响应式网站,商城网站制作。广阳网站建设公司,为广阳等地区提供建站服务。全流程按需定制制作,专业设计,全程项目跟踪,成都创新互联公司专业和态度为您提供的服务

最近在做一个小工程,利用java启动运行。

为了简单方便使用运行,利用maven的assembly将需要使用的jar都打包到一个jar中。这样无论拷贝到哪里,只有运行就可以,不用需要任何配置。

配置时指定mainClass,运行java的main函数时则可以不用指定包含main函数的类路径名。如运行下面的jar文件则非常简单方便(后台运行):nohup java -jar CalculateScore.jar &

第一步:需要在pom的xml中添加配置;

第二步:配置maven的Run Configurations,Goals配置成assembly:assembly即可。

上面的过程一直在使用,很正常。但最近的小应用却出了问题:

打出的jar包不产生日志文件,具体说是不生成log4j的日志信息,程序运行正常也不报错,任何提示都没有。

网上各种查询,没有结果。为了解决问题就各种尝试。

脑子里一直有疑问:以前的都正常使用,都可以打印日志,为什么这个就不行呢?

各种尝试都不行,于是就反编译jar包来看。结果发现log4j.properties文件不是自己的那个文件,不知道是哪个包里的,而自己程序中都使用的Logger.getLogger(name)的形式,所以都无法打印日志信息。

问题来了,为什么不是自己的那个log4j配置文件呢?

Maven打包的时候Console中都有日志信息,仔细查看发现,多次提示log4j的配置已经加入并跳过。

于是猜想:一定是打包的过程中,先加载了其他jar中的log4j的配置文件,而以后的包括自己应用中的log4j的配置文件都被忽略了。

可是问题又来了,自己以前使用同样的方式,也使用了很多第三方包,都包含有log4j的配置文件,为什么都没有问题呢?查看以前的打的包,log4j的配置文件都是自己工程中配置的,这是为什么呢?

于是就开始比较打包的配置过程是否有差别,又有新发现:

Maven打包的Run Configurations配置中有项Base directory,这里配置有问题。

如下面的两张图所示:

如果Base directory中配置的是通过Browse Workspace选择的工程就会产生上面的问题;

如果Base directory中配置的是通过Browse File System选择的文件地址路径就不会产生上面的问题。

具体为什么会出现这种情况,有待研究。

会产生问题的配置方式:

Maven assembly打包文件被覆盖问题

不会产生问题的配置方式:

Maven assembly打包文件被覆盖问题

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前名称:Mavenassembly打包文件被覆盖问题-创新互联
文章URL:http://scyanting.com/article/jiedp.html