温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Maven assembly打包文件被覆盖问题

发布时间:2020-07-02 20:43:18 来源:网络 阅读:2282 作者:zlfwmm 栏目:开发技术

Mavenassembly插件使用:

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

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

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

第一步:需要在pomxml中添加配置;

第二步:配置mavenRun ConfigurationsGoals配置成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打包文件被覆盖问题


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI