2012-08-07 61 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