2012-11-16 80 views
0

當我在src/main/resources中放入xml資源,例如spring配置文件,日誌等時,當我在嵌入式tomcat插件中運行它時,這些文件對我的應用程序來說是不可讀的。但是將這些文件移動到src/main/java可以解決問題。tomcat7 maven插件無法訪問src/main/resources中的資源?

這裏是我使用的插件定義:

<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 /主/ Java,但不是當我把它們放在src /主/資源時,資源被發現運行mvn tomcat7:run

更新:我使用與M2E日食,我可以運行得很好使用運行方式>在服務器上運行,其指向本地Tomcat服務器的應用程序。文件夾結構是正確的,eclipse設置是通過m2e從pom.xml傳入的。

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 /主/資源,很少有這樣的說法並不存在上的src/main/resources文件夾中的文件更多的異常。

更新2:問題被證明是在這是造成.xml文件父POM一個<resources>元件不被包括在所產生的輸出。

+0

這是一個有點怪異,因爲我perso使用,沒有任何問題 你有什麼樣的錯誤?任何樣品重現? –

回答

1

正常情況下,當eclipse試圖找到你的應用程序定義的文件。它將src鏈接到src/main/java和src/main/resources ..你可以在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文件夾)

+0

我猜你創建的maven spring文件夾結構沒有將資源文件夾標識爲SRC文件夾路徑的起點 – user533

+0

我在這個問題中沒有看到eclipse這個詞的蹤跡。而不是標籤說日食。你爲什麼假設他在使用eclipse?還有其他的IDE你知道。而這個問題與任何IDE都沒有關係。這是一個資源可用與否的問題。 – maba

+0

@maba對不起,錯誤地採取。我對他的想法是向他親密的說,在maven中創建文件夾結構可能會有一些錯誤。例如,我爲他設置了日食,以便可以幫助他找出錯誤的位置。 – user533