Scala 我如何拥有sbt';s Jetty是否使用本地域名?
我想让Scala 我如何拥有sbt';s Jetty是否使用本地域名?,scala,jetty,lift,sbt,Scala,Jetty,Lift,Sbt,我想让sbt>~Jetty发布的Jetty版本收听my.name.local,我在/etc/hosts中将其设置为127.0.0.1。在sbt内更改Jetty的设置是必要的 以下是我为我的项目准备的: import sbt._ class LiftProject(info: ProjectInfo) extends DefaultWebProject(info) { // ... val jetty = "org.eclipse.jetty" % "jetty-webapp" % "
sbt>~Jetty
发布的Jetty版本收听my.name.local
,我在/etc/hosts
中将其设置为127.0.0.1
。在sbt内更改Jetty的设置是必要的
以下是我为我的项目准备的:
import sbt._
class LiftProject(info: ProjectInfo) extends DefaultWebProject(info) {
// ...
val jetty = "org.eclipse.jetty" % "jetty-webapp" % "7.3.0.v20110203" % "test"
override lazy val jettyInstance = new JettyRunner(customJettyConfiguration)
def customJettyConfiguration = {
val myLog = log
val myJettyClasspath = jettyClasspath
val myScanDirectories = scanDirectories
val myScanInterval = scanInterval
new CustomJettyConfiguration {
def classpath = jettyRunClasspath
def jettyClasspath = myJettyClasspath
def war = jettyWebappPath
def contextPath = jettyContextPath
def classpathName = "test"
def parentLoader = buildScalaInstance.loader
def scanDirectories = Path.getFiles(myScanDirectories).toSeq
def scanInterval = myScanInterval
def port = jettyPort
def log = myLog
override def jettyConfigurationXML =
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="virtualHosts">
<Array type="java.lang.String">
<Item>my.name.local</Item>
</Array>
</Set>
</Configure>
}
}
}
导入sbt_
类LiftProject(info:ProjectInfo)扩展了DefaultWebProject(info){
// ...
val jetty=“org.eclipse.jetty”%”jetty webapp“%”7.3.0.v20110203“%”测试
override lazy val jettyInstance=新JettyRunner(customJettyConfiguration)
def customJettyConfiguration={
val myLog=log
val myJettyClasspath=jettyClasspath
val myScanDirectories=scanDirectories
val myScanInterval=扫描间隔
新的CustomJettyConfiguration{
def classpath=jettyRunClasspath
def jettyClasspath=myJettyClasspath
def war=jettyWebappPath
def contextPath=jettyContextPath
def classpathName=“测试”
def parentLoader=buildScalaInstance.loader
def scanDirectories=Path.getFiles(myScanDirectories).toSeq
def scanInterval=myScanInterval
def端口=jettyPort
def log=myLog
覆盖def JettyConfiguration XML=
我的名字,本地人
}
}
}
虽然它似乎毫无怨言地启动,但就我所知,访问
my.name.local
并没有击中Jetty。我发布得太快了。我需要做的就是覆盖jettyPort:
override def jettyPort = 80
并通过
sudo
运行sbt
,而不是以root身份运行sbt(危险),我个人更喜欢在Linux上使用iptables将端口80重新路由到8080:
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
它只在下次重新启动之前有效。为了在Ubuntu 10.04上保持设置,我使用:
sudo bash -c "iptables-save > /etc/iptables.rules"
echo "#!/bin/sh
iptables-restore < /etc/iptables.rules
exit 0
" > /etc/network/if-pre-up.d/iptablesload
echo "#!/bin/sh
iptables-save -c > /etc/iptables.rules
if [ -f /etc/iptables.downrules ]; then
iptables-restore < /etc/iptables.downrules
fi
exit 0
" > /etc/network/if-post-down.d/iptablessave
chmod +x /etc/network/if-post-down.d/iptablessave
chmod +x /etc/network/if-pre-up.d/iptablesload
sudobash-c“iptables保存>/etc/iptables.rules”
回声“#!/bin/sh
iptables还原/etc/network/if-pre-up.d/iptablesload
回声“#!/bin/sh
iptables保存-c>/etc/iptables.rules
如果[-f/etc/iptables.downlaules];则
iptables还原/etc/network/if-post-down.d/iptablessave
chmod+x/etc/network/if-post-down.d/iptablessave
chmod+x/etc/network/if-pre-up.d/iptablesload
(请参阅)很好,这比我的解决方案要好。因为我使用的是OS X,所以看起来这个程序名为
ipfw
。。我在这里找到了答案: