使用maven创建的JAR,将资源直接放置在JAR中

我正在使用maven插件创建一个JAR。但是src/main/resources文件夹中的所有文件都直接放置在JAR中,而不是 resources 文件夹中。 (根本不在JAR内创建资源文件夹)

由于使用JAR的应用程序无法找到log4j2.xml文件。以前的资源文件夹正在创建中,但是现在却以某种方式未创建。

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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>testgroup</groupId>
    <artifactId>test</artifactId>
    <version>0.0.1-snAPSHOT</version>
    <packaging>jar</packaging>
    <properties>
        <aspectj.version>1.8.10</aspectj.version>
        <java.version>1.8</java.version>
        <codehaus.mojo.version>1.11</codehaus.mojo.version>
        <log4j.version>2.11.1</log4j.version>
        <maven.compiler.plugin.version>3.1</maven.compiler.plugin.version>
        <maven.assembly.plugin.version>2.4.1</maven.assembly.plugin.version>
        <maven.resources.plugin.version>2.6</maven.resources.plugin.version>
        <sonar.maven.plugin.version>3.3.0.603</sonar.maven.plugin.version>
        <artifactory.maven.plugin.version>2.6.1</artifactory.maven.plugin.version>
        <eclipse.lifecycle.mapping.version>1.0.0</eclipse.lifecycle.mapping.version>
        <junit.platform.surefire.provider.version>1.0.1</junit.platform.surefire.provider.version>
        <maven.surefire.plugin.version>2.19.1</maven.surefire.plugin.version>
        <codehaus.mojo.maven.plugin.version>1.6.0</codehaus.mojo.maven.plugin.version>
    </properties>


    <build>
    <resources>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
            <resource>

                <directory>src</directory>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven.compiler.plugin.version}</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
                <executions>
                    <execution>
                        <id>default-compile</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>default-testCompile</id>
                        <phase>test-compile</phase>
                        <goals>
                            <goal>testCompile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>${maven.assembly.plugin.version}</version>
                <configuration>
                    <!-- get all project dependencies -->
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <!-- MainClass in mainfest make a executable jar -->
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>package.Test</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>org.aspectj</groupId>
                        <artifactId>aspectjtools</artifactId>
                        <version>${aspectj.version}</version>
                    </dependency>
                </dependencies>
            </plugin>
            <plugin>
                <groupId>org.sonarsource.scanner.maven</groupId>
                <artifactId>sonar-maven-plugin</artifactId>
                <version>${sonar.maven.plugin.version}</version>
            </plugin>
            <plugin>
                <groupId>org.jfrog.buildinfo</groupId>
                <artifactId>artifactory-maven-plugin</artifactId>
                <version>${artifactory.maven.plugin.version}</version>
                <inherited>false</inherited>
            </plugin>

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>aspectj-maven-plugin</artifactId>
                <version>${codehaus.mojo.version}</version>
                <configuration>
                    <complianceLevel>${java.version}</complianceLevel>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                        <configuration>
                            <source>${java.version}</source>
                            <target>${java.version}</target>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>${codehaus.mojo.maven.plugin.version}</version>
                <configuration>
                    <mainClass>package.Test</mainClass>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${maven.surefire.plugin.version}</version>
                <dependencies>
                    <dependency>
                        <groupId>org.junit.platform</groupId>
                        <artifactId>junit-platform-surefire-provider</artifactId>
                        <version>${junit.platform.surefire.provider.version}</version>
                    </dependency>
                </dependencies>
            </plugin>

        </plugins>

        <!-- This is added to ignore error in life cycle of aspectj-maven-plugin 
            due to bug in m2eclipse -->
        <pluginmanagement>
            <plugins>
                <plugin>
                    <groupId>org.eclipse.m2e</groupId>
                    <artifactId>lifecycle-mapping</artifactId>
                    <version>${eclipse.lifecycle.mapping.version}</version>
                    <configuration>
                        <lifecycleMappingMetadata>
                            <pluginExecutions>
                                <pluginExecution>
                                    <pluginExecutionFilter>
                                        <groupId>org.codehaus.mojo</groupId>
                                        <artifactId>aspectj-maven-plugin</artifactId>
                                        <version>${codehaus.mojo.version}</version>
                                        <goals>
                                            <goal>copy-dependencies</goal>
                                        </goals>
                                    </pluginExecutionFilter>
                                    <action>
                                        <execute />
                                    </action>
                                </pluginExecution>
                            </pluginExecutions>
                        </lifecycleMappingMetadata>
                    </configuration>
                </plugin>
            </plugins>
        </pluginmanagement>
    </build>

    <dependencies>

        <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>${log4j.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>${log4j.version}</version>
        </dependency>

        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>${aspectj.version}</version>
        </dependency>

    </dependencies>

</project>

项目结构:

Project
    -----src/main/java
    -----src/main/resources
                 log4j2.xml
    -----src/test/java

瓶子结构:

Jar
  -----log4j2.xml

在应用程序控制台中,我会收到消息:

  

错误StatusLogger Log4j2找不到日志记录实现。   请将log4j-core添加到类路径。使用SimpleLogger登录   控制台...

weishuai7894 回答:使用maven创建的JAR,将资源直接放置在JAR中

我几次都遇到过log4j2.xml文件的问题。首先:maven通过将XML文件放入JAR的根目录中来正确地做它-确切地说,它是所属的目录(link to docs - look at "Automatic Configuration" point 9)。

现在,由于Log4j2显然未找到日志记录配置,因此某些地方出了问题。

这些可能是:

  • 您的配置文件中存在语法错误
  • 您的日志文件声明Log4J无法解析(例如,使用在类路径中找不到的特定记录器)
  • 您的一个或多个依赖项在依赖项的jar文件的根目录中也具有类似名称的log4j2.xml文件。在这种情况下,存在歧义,Log4J无法在运行时解析
  • 在运行应用程序时,您已明确指定log4j在哪里寻找该文件。

在某些情况下,您可能会从log4j得到有关发生了什么的提示。无论如何,我建议您使用-Dlog4j2.debug=true参数启动应用程序。这将导致Log4J打印出内部调试信息,这将使您对正在发生的事情有更多的提示。 (如果您不知道如何使用-D参数,请务必进行查找,因为它们的定位可能会有些棘手。如果放置在脚本执行的正确位置,则它们将被忽略。 )

我希望这可以帮助您指定问题。如果没有,将应用程序的控制台输出添加到问题中将非常有帮助。理想情况下,打开调试输出。

,

尝试明确指定输出文件夹,例如:

<resources>
    <resource>
        <targetPath>resources</targetPath>
        <directory>src/main/resources</directory>
    </resource>
    <resource>
        <directory>src</directory>
    </resource>
</resources>

希望这会有所帮助。

干杯!

本文链接:https://www.f2er.com/3052161.html

大家都在问