簡體   English   中英

JAR 使用 maven 創建,資源直接放置在 JAR

[英]JAR created with maven having resources directly placed in JAR

我正在使用 maven 插件創建 JAR。 但是src/main/resources文件夾中的所有文件都直接放置在 JAR 中,而不是資源文件夾中。 (根本沒有在 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 結構:

Jar
  -----log4j2.xml

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

錯誤 StatusLogger Log4j2 找不到日志記錄實現。 請將 log4j-core 添加到類路徑中。 使用 SimpleLogger 記錄到控制台...

我自己多次遇到 log4j2.xml 文件的問題。 首先:maven 正在做正確的事情,通過將 XML 文件放入 JAR 的根目錄中 - 這正是“它所屬 的位置”(指向 9 文檔鏈接)。

現在,由於 Log4j2 顯然沒有找到日志記錄配置,所以有些事情出了問題。

這些可能是:

  • 您的配置文件中有語法錯誤
  • 您的日志記錄文件聲明 Log4J 無法解析(例如,使用在類路徑中找不到的特定記錄器)
  • 您的一個或多個依賴項在您的依賴項的 jar 文件的根目錄中也有一個類似名稱的 log4j2.xml 文件。 在那種情況下,有一個歧義,即 Log4J 在運行時無法解決
  • 當您運行您的應用程序時,您已經明確指定 log4j 應該在哪里尋找該文件。

在某些情況下,您可能會從 log4j 得到關於發生了什么的提示。 無論如何,我建議您使用-Dlog4j2.debug=true參數啟動您的應用程序。 這將導致 Log4J 打印出內部調試信息,這將為您提供有關正在發生的事情的更多提示。 (如果您不知道如何使用-D參數,請務必查看,因為它們的定位可能有點棘手。如果沒有放在腳本執行的正確位置,它們將被忽略)

我希望,這可以幫助您指定問題。 如果沒有,將應用程序的控制台 output 添加到問題中會非常有幫助。 理想情況下,調試 output 開啟。

嘗試明確指定 output 文件夾,如:

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

希望這可以幫助。

干杯!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM