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

注意,整一个流程:

### 回答1: 在搭建Spark Maven项目时,需要配置pom.xml文件。具体配置如下: 1. 配置项目基本信息,括groupId、artifactId、version等。 2. 配置依赖项,括Spark核心依赖、Spark SQL依赖、Hadoop依赖等。 3. 配置插件,maven-compiler-pluginmaven-assembly-plugin等。 4. 配置资源文件log4j.properties等。 5. 配置方式,jar、war等。 6. 配置时需要排除的文件或目录。 以上是搭建Spark Maven项目时pom.xml文件的基本配置,具体配置可根据项目需求进行调整。 ### 回答2: 为了在IDEA上搭建Spark Maven项目,需要对pom.xml文件进行配置。以下是pom.xml文件的基本配置: 1. 配置项目属性 首先,需要在pom.xml文件中添加以下的属性: ``` <groupId>com.example</groupId> <artifactId>spark-maven-project</artifactId> <version>1.0-SNAPSHOT</version> <name>Spark Maven Project</name> ``` 这些属性分别指定了项目的组ID、项目的唯一标识、项目的版本号以及项目的名称。这些属性是项目的基本属性,可以根据具体项目的需要来进行修改。 2. 添加Spark依赖 为了使用Spark,需要将Spark相关的依赖添加到pom.xml文件中。以下是添加Spark Core和Spark SQL的依赖: ``` <dependencies> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.11</artifactId> <version>2.4.5</version> </dependency> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_2.11</artifactId> <version>2.4.5</version> </dependency> </dependencies> ``` 这些依赖用于在项目中使用Spark的核心功能和SQL功能。 3. 添加日志依赖 在Spark项目中,使用日志是非常重要的,因为它可以帮助我们了解和排查代码中的错误。因此,我们需要在项目中添加日志依赖以支持日志记录。以下是添加日志依赖的代码: ``` <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.30</version> </dependency> ``` 4. 添加资源文件 在Spark项目中,资源文件非常重要。资源文件配置文件日志文件等。因此,我们需要在pom.xml文件配置资源文件,以使其可以在项目中使用。以下是配置资源文件的代码: ``` <build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build> ``` 这段代码指定了项目中资源文件的位置以及是否需要进行过滤。 总结 以上是在IDEA上搭建Spark Maven项目所需的pom.xml文件基本配置。除此之外,还需要根据具体项目的需求进行更多的配置,例如添加其他依赖、指定Java版本等。 ### 回答3: 在搭建Spark Maven项目时,我们需要配置pom.xml文件才能成功创建一个项目。pom.xml文件Maven项目的核心文件,用于指定项目的基本信息、依赖和构建等。下面是配置pom.xml文件的步骤: 1.指定Project属性 在pom.xml文件中,首先需要指定Project属性,括groupId、artifactId、version和packaging等信息。其中,groupId代表项目所在的组织或公司,artifactId代表项目的名称,version代表项目的版本号,packaging指定项目的打方式。例如: ``` <groupId>com.spark.example</groupId> <artifactId>spark-maven-example</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> ``` 2.添加Spark依赖 接下来,我们需要添加Spark依赖。在pom.xml文件中,我们可以添加spark-core和spark-sql等Spark依赖的坐标。例如: ``` <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.11</artifactId> <version>2.4.5</version> </dependency> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_2.11</artifactId> <version>2.4.5</version> </dependency> ``` 3.添加其他依赖 除Spark依赖外,我们可能还需要添加其他依赖来支持项目的构建。例如,我们可以添加Scala依赖和JUnit依赖。例如: ``` <dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-library</artifactId> <version>2.11.12</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> ``` 4.指定构建插件 最后,在pom.xml文件中要指定构建插件,来编译、打和部署项目。例如,我们可以通过maven-compiler-plugin插件指定编译器版本为1.8,使用maven-jar-plugin插件将构建的项目打jar文件。例如: ``` <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.2.0</version> <configuration> <archive> <manifest> <mainClass>com.spark.example.SparkExample</mainClass> </manifest> </archive> </configuration> </plugin> </plugins> </build> ``` 通过以上步骤可以完成Spark Maven项目的pom.xml文件配置。在完成配置后,我们可以使用maven命令来编译、打和部署项目。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值