2012-08-07 84 views
0

我正在通過Tapestry 5教程工作,我發現TML文件(或者新的TML文件)不會自動從eclipse中編譯。我只能通過轉到命令行和「mvn package」來獲得新的TML文件或對任何TML文件的更改。這是不對的。新的TML文件不會在eclipse中自動編譯?

在eclipse中這是一個Maven項目,我執行了整個「mvn eclipse:eclipse -DdownloadSources = true」的東西,所以很難相信eclipse項目配置不正確。

這就好像* tml文件沒有資格自動複製到目標目錄中,如編譯的* java文件將或*屬性文件。

如何配置此項目以進行更多交互式調試,我需要做些什麼?

回答

2

就我個人而言,我總是給Jetty添加一個測試依賴項,並用以下類啓動它。因爲代碼是從eclipse的classpath運行的,無論日食如何,jetty web應用程序也能看到。因此,您永遠不會遇到資源費用問題。

<dependency> 
    <groupId>org.mortbay.jetty</groupId> 
    <artifactId>jetty</artifactId> 
    <version>6.1.26</version> 
</dependency> 
package jetty; 
import org.apache.tapestry5.SymbolConstants; 
import org.mortbay.jetty.Connector; 
import org.mortbay.jetty.Server; 
import org.mortbay.jetty.handler.ContextHandlerCollection; 
import org.mortbay.jetty.nio.SelectChannelConnector; 
import org.mortbay.jetty.webapp.WebAppContext; 

/** 
* For jetty 6 
* @see http://docs.codehaus.org/display/JETTY/Embedding+Jetty#comment-4391085 
*/ 
public class JettyWebServer { 
    public static String  context = "/"; 
    public static int   port  = 8069; 

    private Server jettyServer; 

    public void start() throws Exception { 
     System.setProperty(SymbolConstants.PRODUCTION_MODE, "false"); 

     jettyServer = new Server(); 
     Connector connector = new SelectChannelConnector(); 
     connector.setPort(port); 
     connector.setHost("127.0.0.1"); 
     jettyServer.addConnector(connector); 

     WebAppContext context = new WebAppContext("src/web/", JettyWebServer.context); 
     context.setLogUrlOnStart(true); 
     context.setParentLoaderPriority(true); 
     jettyServer.setStopAtShutdown(true); 

     ContextHandlerCollection contexts = new ContextHandlerCollection(); 
     contexts.addHandler(context); 
     jettyServer.setHandler(contexts); 

     jettyServer.start(); 
    } 

    public void join() throws Exception { 
     jettyServer.join(); 
    } 

    public void stop() throws Exception { 
     if (jettyServer != null) 
      jettyServer.stop(); 
    } 

    public static void main(String[] args) throws Exception { 
     JettyWebServer server = new JettyWebServer(); 
     try { 
      server.start(); 
      server.join(); 
     } finally { 
      server.stop(); 
     } 
    } 
} 
+1

是的,這不是一個Tapestry問題,它是一個Maven/Jetty-Plugin問題。 Maven複製你的文件,在Eclipse中改變它們,Maven不會將它們複製到正在運行的Tapestry應用程序可以看到更改的位置。我使用RunJettyRun Eclipse插件在Eclipse中運行我的Tapestry應用程序(在切換到IDEA之前)。 – 2012-08-09 18:08:28

+0

我幾乎達成了相同的結論。 Maven插件正在阻礙。在這樣的日子裏,我考慮把整個IDE的東西夾緊,然後回到emacs。感謝所有人的關注。 – 2012-08-09 20:27:24

0

我假設你的模板文件在src/main/java的類文件旁邊?除了通常的/resources位置之外,您還需要確保Maven將該位置的文件視爲資源。這種配置應該可以工作:

<resources> 
    <resource> 
     <directory>src/main/resources</directory> 
    </resource> 
    <resource> 
     <directory>src/main/java</directory> 
     <includes> 
      <include>**/*</include> 
     </includes> 
     <excludes> 
      <exclude>**/*.java</exclude> 
     </excludes> 
    </resource> 
</resources> 

這也使得Maven Eclipse插件(和M2集成)的行爲如預期。

+0

感謝您的答覆,但似乎並不成爲問題。我的* tml文件當前位於src/main/resources(Maven默認值,不是?)。我試着把你建議的標籤放在pom.xml的標籤下(沒有/ src/main/java的規範,因爲我沒有任何資源)並且沒有任何改變。也就是說,命令行中的「mvn package」總能正常工作,但讓eclipse自動完成它的自動編譯,並希望RunJettyRun Jetty實例能夠獲取更新,而不會將* tml文件(或* .properties文件)的更新視爲好)。 – 2012-08-07 20:25:47

+0

好的,在TMLs /資源中,你應該沒有問題。我從來沒有使用過RunJettyRun,但是我總是從Eclipse執行'jetty:run'目標。 – Henning 2012-08-07 21:00:52

相關問題