Как мне использовать Jetty sbt для использования локального доменного имени? - PullRequest
2 голосов
/ 01 марта 2011

Я бы хотел, чтобы версия Jetty, запущенная sbt> ~jetty, прослушивала my.name.local, для которой я установил 127.0.0.1 в /etc/hosts. представляется возможным изменить настройки Jetty изнутри sbt.

Вот что у меня есть для моего проекта:

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>
    }
  }
}

Хотя кажется, что запуск без жалоб, посещение my.name.local, насколько я могу судить, не затронет Jetty.

Ответы [ 2 ]

3 голосов
/ 29 марта 2011

Вместо того, чтобы запускать sbt от имени пользователя root (опасно), я лично предпочитаю перенаправить порт 80 на 8080, используя iptables в Linux:

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

(см. это Ubuntu iptables wiki )

1 голос
/ 01 марта 2011

Я отправил слишком рано. Все, что мне нужно сделать, это переопределить jettyPort:

override def jettyPort = 80

И запустить sbt через sudo.

...