Maven jetty插件使用错误的资源文件URL

时间:2014-02-26 01:27:11

标签: maven maven-plugin vagrant maven-jetty-plugin

我正在我的eclipse工作区上的一个流浪盒设置中运行一个项目。我正在设置一个新的maven项目,但我使用Windows路径而不是流浪路径的插件有问题。我的Windows工作区是在C:\ Dev中设置的,所以当我'流浪'时,我的整个工作区在我的VM中可用。换句话说,VM中的/ vagrant包含C:\ Dev的内容。

当我执行mvn jetty:run时,一切正常,所有路径都使用vagrant版本(/ vagrant / mvn_project / target ...)。但是,一旦插件开始扫描项目以进行更改,它将引发以下错误:

2014-02-26 01:18:53.756:WARN:oejw.WebAppContext:Scanner-0: Failed startup of context o.e.j.m.p.JettyWebAppContext@591f46d8{/,[file:/vagrant/mvn_project/web, file:/vagrant/mvn_project/target/webapps/ROOT/],STARTING}{/ROOT/]}
javax.servlet.UnavailableException: Malformed URL 'file://C:\\Dev\\mvn_project/target/webapps/ROOT/WEB-INF/dtd/web-app_2_3.dtd' : For input string: "\\Dev\\mvn_project"
    at org.apache.struts.action.ActionServlet.init(ActionServlet.java:402)
    at javax.servlet.GenericServlet.init(GenericServlet.java:244)
    at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:561)
    at org.eclipse.jetty.servlet.ServletHolder.initialize(ServletHolder.java:351)
    at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:840)
    at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:300)
    at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1347)
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:745)
    at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:492)
    at org.eclipse.jetty.maven.plugin.JettyWebAppContext.doStart(JettyWebAppContext.java:282)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69)
    at org.eclipse.jetty.maven.plugin.JettyRunMojo.restartWebApp(JettyRunMojo.java:532)
    at org.eclipse.jetty.maven.plugin.JettyRunMojo$1.filesChanged(JettyRunMojo.java:485)
    at org.eclipse.jetty.util.Scanner.reportBulkChanges(Scanner.java:681)
    at org.eclipse.jetty.util.Scanner.reportDifferences(Scanner.java:539)
    at org.eclipse.jetty.util.Scanner.scan(Scanner.java:391)
    at org.eclipse.jetty.util.Scanner$1.run(Scanner.java:329)
    at java.util.TimerThread.mainLoop(Timer.java:555)
    at java.util.TimerThread.run(Timer.java:505)

这是插件的错误还是我可以使用配置设置来设置此值?

编辑:更多上下文......似乎问题与过滤后的资源有关。

     <resources>
        <resource>
            <directory>${project.basedir}/src/main/filtered-resources</directory>
            <filtering>true</filtering>
            <targetPath>${project.basedir}/target/webapps/ROOT</targetPath>
        </resource>
    </resources>

将$ {project.basedir}更改为/ vagrant / mvn_project似乎可以解决问题,但显然这只是一种解决方法而不是解决方案(例如,在CI中不起作用)。

更新:事实证明,责任在于Eclipse。 Eclipse偶尔会构建项目,当它这样做时,$ {project.basedir}引用C:\ Dev \ mvn_project而不是/ vagrant / mvn_project。有没有办法在没有硬编码的情况下覆盖$ {project.basedir}?

1 个答案:

答案 0 :(得分:1)

简单回答:在eclipse中禁用构建。取消选中项目 - &gt;自动构建。始终从vagrant(mvn compile)中运行构建。 JSP热更改仍然可以自动运行。