2010-05-27 7 views
11

Eclipse에 스칼라 프로젝트가있어서 서버에 배포 할 수 있도록 패키지화해야합니다. Jetty 기반이지만 독립 실행 형 응용 프로그램으로 실행됩니다. Scala 클래스, Java 클래스 및 여러 가지 타사 jar가 포함되어 있습니다.Eclipse에서 Scala 프로젝트를 배포하는 방법은 무엇입니까?

Scala Eclipse 플러그인에 몇 가지 배포 옵션이 있다고 가정했지만 비어 있습니다.

Scala 프로젝트를 실행 가능 파일로 패키지화하여 배포 할 수있는 가장 간단한 방법은 무엇입니까?

도움을 주시면 감사하겠습니다. 건배.

답변

5

이 내가 배포 스칼라 응용 프로그램을 포장에 대한 발견하는 가장 좋은 방법입니다 :

첫째, Gary Boon에 의해 설명 된대로 응용 프로그램의 주 진입 점으로 자바 클래스를 생성 . 이렇게하면 java 명령을 사용하여 JAR에서 응용 프로그램을 실행할 수 있습니다.

import java.util.ArrayList; 

import scala.tools.nsc.MainGenericRunner; 


public class Main { 
    public static void main (String[] args) { 
     ArrayList<String> argList = new ArrayList<String>(); 
     argList.add("fully.qualified.ClassName"); 
     for (String s : args) { 
      argList.add(s); 
     } 
     MainGenericRunner.main(argList.toArray(new String[0])); 
    } 
} 

지금 당신의 모든 클래스를 패키지로 이클립스의 수출의 Runnable JAR 명령을 사용할 수 있습니다 : 나는 자바 명령으로 스칼라 클래스를 실행하는 원본 경로에 스칼라 라이브러리를 설치하는 경우에도, 문제가 발견 라이브러리를 JAR 파일에 저장합니다. JAR의 메인 클래스를 Java 진입 점으로 설정하십시오. Eclipse에서 생성 한 출력 설정을 ANT 빌드 파일로 저장하여 조정할 수도 있습니다. ANT를 사용하여 Java 진입 점이있는 JAR을 생성하면 최상의 결과를 얻을 수 있습니다. 이런 방식으로 다른 JAR 의존성을 패키지화 할 수 있기 때문에 다른 호스트에서 JAR을 실행할 때 훨씬 간단 해집니다. 최소한 Scala 라이브러리와 Scala 도구 JAR이 필요합니다. 이것은 배경으로 프로그램을 실행

nohup java -jar MyJettyServer.jar </dev/null>> server.log 2>> server_error.log & 

: 당신은 내가, 당신은 다음 명령 (source)를 사용하여 데몬 프로세스로 서버를 실행할 수 있습니다, 부두를 내장 사용하는 경우

<zipfileset excludes="META-INF/*.SF" src="${scala.lib.jar}"/> 
<zipfileset excludes="META-INF/*.SF" src="${scala.tools.jar}"/> 

프로세스는 현재 사용자 세션과 독립적이므로 호스트를 로그 아웃 한 후에 프로세스가 계속됩니다.

5

bb. 물론 Ant, Maven 또는 다른 빌드 도구를 사용하여 Jetty 배포를 위해 WAR를 패키징 할 수 있습니다. 이클립스에서 외부 도구로 sbt를 시작할 수 있습니다.

bbt는 JRebel 구성을 지원하는 것으로 보입니다. 일단 실행되면 추가적인 전쟁 배포 단계없이 Eclipse에서 자원과 클래스를 변경할 수 있어야합니다.

+0

토마스에게 감사드립니다. Java 빌드 도구에 관해서는 약간 신참 스럽습니다. WAR 파일이 원하는 것인지 확실하지 않습니다. 나는 임베디드 모드에서 Jetty를 실행 중이므로 모든 것을 실행 가능한 JAR 또는 기타 패키지로 패키징하기를 원했습니다. 아니면 잘못된 나무를 짖고 있습니까? – lach

+0

WAR은 서블릿 컨테이너 (http : //) 용으로 애플리케이션을 패키징하는 표준 (SRV.9.6 웹 애플리케이션 아카이브 파일 - http://jcp.org/aboutJava/communityprocess/mrel/jsr154/index2.html)입니다. Wiki.eclipse.org/Jetty/Howto/Deploy_Web_Applications). –

2

정확히 똑같은 일을하고 있습니다 : Jetty가 포함 된 일반 응용 프로그램 내에서 실행되는 서버 측 코드를 개발하십시오. 요즘은 스칼라 코드가 대부분 Java였습니다. 어쨌든 하나 이상의 JAR 파일에서 Java 코드를 실행하기 만하면됩니다.

두 경우 모두 배포 빌드에 Ant를 사용합니다. 내 스칼라 프로젝트는 때로는 기존 Java 클래스를 사용합니다. 이를 위해 Java 클래스를 JAR 파일로 컴파일하는 Ant 타겟을 추가합니다.이 JAR 파일은 이후 Eclipse Scala 플러그인과 Ant 배포 빌드 타겟에서 모두 사용됩니다.

+0

안녕 Silvio. 감사! 그게 내가 필요한 것 같아. 서버 응용 프로그램을 빌드하는 데 사용하는 ANT 파일의 예를 게시 할 수 있습니까? – lach

+0

어색한 예를 찾을 수 있습니다 : http://www.jambo-software.com/download/build.xml –

0

자바와 마찬가지로 일식을 사용하여 WAR 파일을 만들 수 있습니다. 자바와 마찬가지로 jar 파일도 있습니다. 왜냐하면 런타임에는 java입니다. 더 이상 마법이 필요하지 않습니다. 많은 시행 착오 후

+0

아니,이 나를 위해 작동하지 않습니다. 항아리가 실행될 때 클래스가 실행할 수있는 선택 가능한 옵션은 없습니다. 항아리를 손수 만든다면 효과가 있을까요? – fadedbee

2

간단한 해결책은 Scala 프로그램의 main 메소드를 호출하는 작은 Java 클래스를 만드는 것입니다. 그런 다음 표준 eclipse jar 내보내기를 사용할 수 있습니다. 중요

public class Main { 
    public static void main (String[] args) { 
     MyScalaObjectWithMainMethod.main(args); 
    } 
} 

: 스칼라 - library.jar는 외부 항아리로 빌드 경로에 있는지 확인 내보내기 전에 (안 라이브러리로) 그것은 당신의 항아리와 함께 수출 될 수 있도록.

이 솔루션은 Jesper Villadsen의 의견으로 Gary Boone's page에 있습니다 (누가 다소 복잡한 접근 방식을 제안합니다). 게리의 솔루션을 실행하는 데 문제가있는 동안 Jesper의이 솔루션은 완벽하게 작동합니다. 감사!

관련 문제