【发布时间】:2014-03-28 14:23:42
【问题描述】:
我正在我的 Eclipse 工作区上的 vagrant box 设置中运行一个项目。我正在建立一个新的 maven 项目,但我在使用 Windows 路径而不是 vagrant 路径的插件时遇到问题。我的 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}?
【问题讨论】:
标签: maven maven-plugin vagrant maven-jetty-plugin