0

Spring構成ファイルやロギングなどのxmlリソースをsrc/main / resourcesに配置すると、組み込みのTomcatプラグインで実行すると、これらのファイルをアプリケーションで読み取ることができなくなります。ただし、これらのファイルをsrc / main / javaに移動すると、問題が修正されます。

これが私が使用しているプラ​​グインの定義です:

<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.0</version>
    <configuration>
        <port>9090</port>
        <path>/</path>
            <contextFile>${basedir}/src/main/webapp/META-INF/context.xml</contextFile>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>${postgres.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-instrument-tomcat</artifactId>
            <version>${spring.framework.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>javax.mail-api</artifactId>
            <version>${javax.mail.version}</version>
            <exclusions>
                <exclusion>
                    <artifactId>activation</artifactId>
                    <groupId>javax.activation</groupId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
    <executions>
        <execution>
            <id>default-cli</id>
            <goals>
                <goal>deploy</goal>
                <goal>run-war</goal>
            </goals>
            <phase>pre-integration-test</phase>
        </execution>
    </executions>
</plugin>

リソースをsrc/main / javaに配置したときにリソースが見つかるのに、実行時にsrc / main/resourcesに配置したときにリソースが見つからないのはなぜですか。mvn tomcat7:run

更新: m2eでeclipseを使用しています。ローカルのTomcatサーバーを指す[実行]> [サーバーで実行]を使用して、アプリケーションを正常に実行できます。フォルダー構造は正しく、Eclipse設定はpom.xmlからm2eを介して取得されます。

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.util.Log4jConfigListener
java.lang.IllegalArgumentException: Invalid 'log4jConfigLocation' parameter: class path resource [log4j-config.xml] cannot be resolved to URL because it does not exist
    at org.springframework.web.util.Log4jWebConfigurer.initLogging(Log4jWebConfigurer.java:155)
    at org.springframework.web.util.Log4jConfigListener.contextInitialized(Log4jConfigListener.java:45)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4791)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5285)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)

この場合、log4j-config.xmlはsrc / main / resourcesにありますが、src / main/resourcesフォルダーにファイルが存在しないという例外がいくつかあります。

更新2:<resources>問題は、生成された出力に.xmlファイルが含まれない原因となっている親POMの要素であることが判明しました。

4

1 に答える 1

1

通常、Eclipse がアプリケーションで定義されているファイルを見つけようとすると、src が src/main/java および src/main/resources にリンクされます。Eclipse 用に生成された maven の .class ファイルに次のエントリが表示されます。 .

<classpath>
    <classpathentry including="**/*.java" kind="src" path="src/main/java"/>
    <classpathentry excluding="**/*.java" kind="src" path="src/main/resources"/>

/**all repository entries are also here**/
</classpath>

次に、リソースについては、最初に tomcat がリソース内にあるかどうかをチェックします (また、Java フォルダー内でもチェックします)。

于 2012-11-16T08:27:14.937 に答える