Maven assembly打包文件被覆盖问题

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选择的文件地址路径就不会产生上面的问题。

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

会产生问题的配置方式:

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

时间: 2024-11-03 01:35:17

Maven assembly打包文件被覆盖问题的相关文章

eclipse工具maven项目打包文件不是最新修改的

1.问题描述:maven项目,完成一些功能开发后,在进行打包更新服务器系统时,本地eclipse工具对文件打成jar包操作,更新到服务器上没有修改的效果,包括打包整个工程为一个war包,也是有同样问题,不是最新的文件: 2.问题排查解决: (1).多次打包发现还是没有效果,打包方式没有问题,排查发现,打包到服务器上的相关代码文件的最新日期显示还是本次改动之前的原先的日期,说明没有打包到本地开发环境中最新的代码文件,百度一圈没有讲这个的,多次打包无果, 如我本地这个代码文件提交svn之后,日期变为

question --> maven assembly plugin 修改文件默认权限

使用maven assembly plugin插件添加执行脚本时,发现默认权限为644,还需要手动添加执行权限.这很麻烦,于是查看文档 官方文档 http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html#class_fileSet fileMode String Similar to a UNIX permission, sets the file mode of the files included. THIS IS

maven 项目打包时无法解析读取properties文件

在做项目时遇见一个问题,无法解析properties文件的 内容 异常为 Could not resolve placeholder ......... 在此之前均有做相关的 配置 但是从未出现过如上异常,困惑了很久,最后把 war包提取出来得知   properties文件未被加载进项目中,因此无法识别. 但这的原因是为什么呢   ,原来此项目采用的是maven配置,但是maven在打包时将丢失properties文件,原因maven执行compile是只会扫描*.class文件. 那么这种请

maven项目用assembly打包可执行jar包

该方法只可打包非spring项目的可执行jar包,spring项目可参考:http://www.cnblogs.com/guazi/p/6789679.html 1.添加maven插件: <!-- Maven Assembly Plugin --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactI

MAVEN实战-打包的技巧

"打包"这个词听起来比较土,比较正式的说法应该是"构建项目软件包",具体说就是将项目中的各种文件,比如源代码.编译生成的字节码.配置文件.文档,按照规范的格式生成归档,最常见的当然就是JAR包和WAR包了,复杂点的例子是Maven官方下载页面的分发包,它有自定义的格式,方便用户直接解压后就在命令行使用.作为一款"打包工具",Maven自然有义务帮助用户创建各种各样的包,规范的JAR包和WAR包自然不再话下,略微复杂的自定义打包格式也必须支持,本文

Maven 相关打包插件

Packaging的含义 任何一个Maven项目都需要定义POM元素packaging(如果不写则默认值为jar).顾名思义,该元素决定了项目的打包方式.实际的情形中,如果你不声明该元素,Maven会帮你生成一个JAR包:如果你定义该元素的值为war,那你会得到一个WAR包:如果定义其值为POM(比如是一个父模块),那什么包都不会生成.除此之外,Maven默认还支持一些其他的流行打包格式,例如ejb3和ear.你不需要了解具体的打包细节,你所需要做的就是告诉Maven,"我是个什么类型的项目&q

史上最全的maven pom.xml文件教程详解

<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/maven-v4_0_0.xsd >; <!-- 父项目的坐标.如果项目中没有规定某个元素的值,那么父项目中的对应值即为项目的默认值.

Maven pom.xml文件详细教程

--------------------------------------------------------------- <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 assembly plugin使用

使用场景 在使用maven来管理项目时,项目除了web项目,还有可能为控制台程序,一般用于开发一些后台服务的程序.最近在工作中也遇到了这种场景,使用quartz开发一个任务调度程序.程序中依赖很多jar包,项目的启动时只需要初始化spring容器即可. 使用方法 使用一个简单的基于spring框架的demo来做程序示例,来介绍maven assembly插件的使用方法. 项目中的代码目录如下: 在以上代码目录中,assembly目录下为打包的描述文件,下面会详细介绍该文件,bin目录下为启动脚本