1

私は現在、再利用可能な DSL と DSL に基づいて構築されたアーティファクトの両方を作成するために Xtext を検討しています。簡略化されたプロジェクト レイアウトは次のとおりです。

  • projectA: Xtext ベースの DSL、feature-project、updatesite などが含まれます。
  • projectB: projectA のアーティファクトを使用してコードを生成します。
  • projectC: projectB から生成されたコードを使用します。

Maven と Xtext を使用して projectA を構築することは問題ではありません (ネット上には既にいくつかの例があります) が、projectA の DSL を projectB 内で使用し、生成されたコードを projectC で使用するためにリリースする方法がわかりません。チュートリアル、ドキュメント、および私が見つけることができるすべての例は、projectA から生成された Eclipse プラグインを使用して、projectB でコードを生成しています。これは問題なく動作しますが、生成されたコードを再利用する方法が気になります。

projectA のコード ジェネレーターだけを Maven などで使用することはできますか? 継続的インテグレーション サーバーで DSL を使用するにはどうすればよいですか? そのためにEclipseヘッドレスを実行しましたか?

私には明らかな何かが欠けているように思えます。したがって、ポインタ、ヒント、例は大歓迎です!

4

1 に答える 1

0

Fornax MWE ランナーを使用して Xtext からコードを生成することができます (残念ながら Maven Central では利用できませんが、http://www.fornax-platform.org/m2/repositoryでは利用できます)。

Tycho ベースのコンパイルに基づくEMF-IncQuery (対応する pom ファイル) でこのアプローチを使用します。

1. src-gen および xtend-gen フォルダーを空にするように clean プラグインを構成します (core、test、ui プロジェクトなどのすべての関連プロジェクトから) 2. Fornax プラグインを使用して MWE2 ワークフローを実行します 3. Xtend コンパイラーを実行します (一部のコードは Xtend クラスとして生成されます)

追加の (主にリポジトリと Xtend コンパイラ バージョン) 構成が、ビルドの親 pomに追加されます。

更新:間違った質問に答えました。ごめん。別の答えを試しています。

まず、ヘッドレス環境に統合できるように言語/コンパイラを実装する必要があります (xtend-maven-compiler のパッケージ方法を参照してください)。

文法には、モデルとファイル作成用のヘルパー クラスを受け取るジェネレーター ( IGeneratorインターフェイスを実装する) が既にあります。Xbase を使用する文法の場合、このジェネレーターは Xtext によって実装されます。それ以外の場合は、既に実装しているはずです。

次に、このジェネレーターを利用する追加のプロジェクトを提供して、そのようなコードを生成することができます。基本的に、言語の StandaloneSetup/headless インジェクターを使用して (新しいプロジェクトで) IGenerator インスタンスを取得し、ビルドに従ってパラメーター化された新しい FileSystemAccess インスタンスを追加します。

次に、プロジェクトは元のプロジェクトを参照する必要があります。たとえば、プラグイン プロジェクトを Tycho でビルドし、それを jar ベースのコンパイラとして使用することもできます。または、純粋な Maven プラグインを作成することもできますが、その場合、Xtext に必要な推移的な依存関係を手動で選択する必要がある場合があります。

xtend-maven-compiler プラグインの場合、すべての依存関係を 1 つの jar ファイルにコピーして「uberjar」を作成し、これを参照することで解決されます。醜いですが、うまくいきます。

于 2013-09-04T11:52:09.740 に答える