2013-09-04 2 views
0

현재 재사용 가능한 DSL과 DSL을 기반으로 만들어진 이슈를 모두 만들려면 Xtext를 조사하고 있습니다.Xtext 생성 된 아티팩트 사용

  • PROJECTA은 : 등
  • projectB Xtext 기반 DSL, 기능 프로젝트, UpdateSite 디를 포함합니다 : 단순화 프로젝트 레이아웃은 다음과 같습니다 코드를 생성 할 수 PROJECTA에서 아티팩트를 사용합니다.
  • projectC는 : projectB
  • 에서 생성 된 코드를 사용
메이븐과 Xtext는 문제가되지 않습니다 (거기에 그물 이미 몇 가지 예입니다)하지만 난 DSL을 사용하는 방법을 얻을하지 않습니다를 사용

건물 PROJECTA 프로젝트 B의 projectA에서 생성 된 코드를 projectC에서 소비합니다. 자습서, 문서 및 내가 찾을 수있는 모든 예는 projectA에서 생성 된 Eclipse 플러그인을 사용하여 projectB에 코드를 생성합니다. 이 잘 작동하지만 생성 된 코드를 재사용하는 방법을 궁금해.

Maven이나 이와 비슷한 projectA의 코드 생성기 만 사용할 수 있습니까? 지속적인 통합 서버에서 DSL을 사용하려면 어떻게해야합니까? 나는 이클립스 헤드리스를 실행 했습니까?

나에게는 분명히 뭔가 빠져있는 것처럼 보입니다. 그래서 모든 포인터, 힌트, 예제는 환영합니다!

답변

0

Xtext에서 Fornax MWE 러너를 사용하여 코드를 생성 할 수 있습니다 (슬프게도 Maven Central에서는 사용할 수 없지만 http://www.fornax-platform.org/m2/repository에 있음).

우리는 티코를 기반으로 컴파일

1. 구성 모든 관련에서합니다 (SRC-세대와 xtend 세대 폴더를 비울 깨끗한 플러그인을 기반으로 EMF-IncQuery에서이 방법 (corresponding pom file)를 사용 같은 2. 화로 자리 플러그인) 코어 테스트 및 UI 프로젝트와 같은 프로젝트는, (일부 코드가 Xtend 클래스로 생성)을 Xtend 컴파일러를 실행 MWE2 워크 플로우를 3을 실행하는

(추가 대부분 저장소 및Xtend 컴파일러 버전) 구성이 우리 빌드의 parent pom에 추가되었습니다.

업데이트 : 대답이 잘못되었습니다. 죄송합니다. 다른 대답을하려고합니다.

우선 머리가없는 환경에서 통합 가능한 방식으로 언어/컴파일러를 구현해야합니다 (xtend-maven 컴파일러의 패키지 방식 참조).

당신의 문법은 이미 파일 생성을위한 모델과 도우미 클래스를받는 생성기 (IGenerator 인터페이스 구현)를 가지고 있습니다. Xbase를 사용하는 문법의 경우,이 생성기는 Xtext로 구현됩니다. 그렇지 않으면 이미 구현되어 있어야합니다.

그런 다음이 생성기를 사용하여 추가 코드를 생성 할 수 있습니다. 기본적으로 언어 StandaloneSetup/headless injector를 사용하여 (새 프로젝트에서) IGenerator 인스턴스를 가져오고 빌드에 따라 매개 변수화 된 새 FileSystemAccess 인스턴스를 추가하십시오.

그러면 프로젝트가 원래 프로젝트를 참조해야합니다. 예 :플러그인 프로젝트 일 수도 있고 Tycho로 빌드 한 다음 jar 기반 컴파일러로 사용할 수도 있습니다. 또는 순수한 Maven 플러그인을 생성 할 수 있지만이 경우에는 Xtext에서 필요로하는 전이 종속성을 수동으로 선택해야 할 수도 있습니다.

xtend-maven-compiler 플러그인의 경우 모든 종속성을 단일 jar 파일로 복사하여 'uberjar'를 작성하면이 문제가 해결됩니다. 추악하지만 작동합니다.

+0

예를 들어 'projectA'에이 구성을 사용하지 않았습니까? 예 : MyDSL.xtext 및 GenerateMyDSL.mwe2를 'projectB'에서 사용할 항목으로 변환 하시겠습니까? 어떻게 'projectB'안에있는 Something.mydsl을 Java로 변환하고 .jar로 패키징 할 수 있습니까? – user2746387

+0

죄송합니다. 나쁜 대답. 내 대답 전체를 다시 작성하십시오. –

+0

위대한 팁에 대해 감사드립니다. – user2746387