IDEA maven中assembly打可执行jar包,发现里面的log4j文件(log4j.properties)不是主工程的配置log文件

场景

现在有四个项目A,B,C,D。打包后执行,发现日志配置不对。通过压缩软件(.7z)打开通过assembly打包的可执行'A.jar',发现里面的log4j.properties的配置是B的配置。

经过一番查错,比如调整pom配置,设置过滤之类的,也没用。

尝试的方法:

1.把B(甚至C和D都改了)的配置改成A的,结果生成的Jar包中还是原来的配置,也就是说,它调用的log4j配置文件,是存在于一个jar中(甚至不在class文件),并不是以文件形式存在。

2.调整了pom,如下,也没用;过滤B的配置文件

        <dependency>
            <groupId>com.A</groupId>
            <artifactId>A</artifactId>
            <version>1.0-SNAPSHOT</version>
            <scope>compile</scope>
			<exclusions>
				<exclusion>
					<groupId>B.pro</groupId>
					<artifactId>log4j.properties</artifactId>
				</exclusion>
			</exclusions>
        </dependency>

3.参考某个解决方案,把log4j的版本从1.2.14改为1.2.16,也没有用

		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.16</version>
		</dependency>

解决方案

帮所有依赖的子工程,都进行‘clean’和'install'。因为如果你的pom中添加了B,C,D的依赖,那么IDEA会‘可能’优先去MAVEN仓库里找旧的配置。所以导致新的配置文件不生效。

所以,将A,B,C,D的配置都更改后,进行clean后install,相当于更新了本地仓库。这样,再用assembly打包,即可。

mvn clean package assembly:single -f pom.xml

通过这样的方式,最终打包A工程后,依赖的依然是B的log4j.properties文件,但是现在已经可以将A的配置替换给B的log4j.properties。但是这样其实并不是严谨的做法

以下方案,通过修改B的pom.xml文件,在package和install阶段,直接排除B的log4j.properties。

<build>
    <plugins>
          
         <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.6.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>3.2.0</version>
            <configuration>
                <resources>
                    <resource>
                        <directory>src/main/resources</directory>
                        <excludes>
                            <exclude>log4j.properties</exclude>
                        </excludes>
                    </resource>
                </resources>
                <outputDirectory>${project.build.outputDirectory}</outputDirectory>
            </configuration>
            <executions>
                <execution>
                    <id>exclude-log4j-properties</id>
                    <phase>process-resources</phase>
                    <goals>
                        <goal>copy-resources</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

通过上述做法,B工程被package和install后,在本地maven仓库的B.jar包中,就不存在log4j.properties了。以此类推,B,C,D都可以这样排除log4j.properties的依赖,最终对A进行assembly打包,包含的配置就是A的log4j.properties

注意,整一个流程:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值