MPS 2024.1 ヘルプ

言語のためのスタンドアロン IDE を構築する

導入

スタンドアロン IDE という用語は、特定のビジネス目的に必要なアーティファクトのみを含む、IDE の簡略版を指します。スタンドアロン IDE はエンドユーザーに DSL を配布する便利な方法を提供します。エンドユーザーは、IDE 設計者が用意した IDE サポート、リファクタリング、コード分析を含む言語を、専用の IDE で快適に使用できます。気になる言語設計関連の機能や不要な言語はすべて削除されます。

言語を設計したら、MPS を使用すると、これらのドメイン固有の言語を使用するために必要なアーティファクトのみを含む MPS の簡易バージョンを構築できます。MPS のさまざまな側面を削除またはカスタマイズして、特定のユーザーグループにカスタムのユーザーエクスペリエンスを提供できます。この記事ではその方法について説明します。

特に、MPS の以下の側面をカスタマイズできます。

  • さまざまなアイコン、スローガン、スプラッシュスクリーン、イメージ

  • ヘルプ URL

  • ユーザーが利用できる一連の言語

  • MPS で利用可能なプラグインのセット

プロセスの概要

MPS のカスタム RCP バージョンをビルドするには、いわゆるビルドスクリプトを含むソリューションを作成する必要があります。ビルドスクリプトは MPS のビルド言語で記述されており、RCP アプリケーション(および IntelliJ および MPS プラグイン)のビルド用に最適化されています。このビルドスクリプトのジェネレーターを実行すると、MPS は実際の RCP ディストリビューションを作成する ant ファイルを生成します。

サンプル RCP ビルドの構築

このドキュメントでは、MPS ディストリビューションにバンドルされているロボット Kaja サンプル用の RCP ビルドスクリプトの開発について説明します。MPS でプロジェクトを開き、ここで説明されている手順に従うことができます。

ソリューションとビルドスクリプトの作成

ウィザードの方法

必要なビルドスクリプトを作成するための望ましい方法は、現在のプロジェクトでソリューション構築ウィザードを実行することです。プロジェクトビューツールウィンドウから起動します。

build1.png

ウィザードは、スクリプトを保持し、必要なインポートと使用言語を設定するための新しいソリューションとモデルを作成します。新しいソリューションを作成する代わりに、既存のソリューションまたはモデルを再利用するようにウィザードに指示できます。

build2.png
build3.png

次に、3 つの使用可能なオプションからスタンドアロン IDE オプションを選択する必要があります。

build5.png

ウィザードの最後のページで、IDE の一部にしないモジュールを選択解除します。通常、サンドボックスモジュールをスキップして、言語とプラグインおよびランタイムソリューションを保持します。

build6standalone.png

新しいソリューションがプロジェクトビューにリストされ、2 つの新しいビルドスクリプトが保持されます。

sa4.png

依存関係も正しく設定されています。

sa5.png
sa6.png

手動による方法

あるいは、手動でスクリプトを作成することもできます。内部に新しいモデルを使用して新しいソリューションを作成する必要があります。モデルで、使用言語を設定します

  • jetbrains.mps.build

  • jetbrains.mps.build.mps

また、jetbrains.mps.ide.build モデルをインポートします。これで、モデルに新しいビルドプロジェクトを作成できます(名前はわかりにくいです。実際には新しいビルドプロジェクトではなく、ビルドスクリプトだけです)。

sa7.png

ビルドスクリプトの調査

ビルドスクリプトにはいくつかのセクションが含まれています。これらのセクションは、空のビルドスクリプトで確認できます。

sa15.png

ビルドスクリプトのさまざまなセクションを見てみましょう。

  • ベースディレクトリベースディレクトリは、他のすべてのパスが指定される相対パスを定義します。デフォルトでは、これは、結果の ant ファイルが生成され、実行されるディレクトリです。

  • プラグインを使用するビルド言語自体はプラグインを介して拡張できます(これらは MPS 自体を構成するプラグインではないことに注意してください。これらは後で構成されます)。これらのプラグインは、追加のビルド言語構文に貢献します。通常、java および mps プラグインが必要です。以下では、これらのプラグインによって提供される構文を使用します。

  • マクロマクロは本質的に名前と値のペアです。「マクロ」セクションでは、これらの名前が定義され、値が割り当てられます。ビルドスクリプトの残りの部分では、これらのマクロ変数が使用されます。MPS は 2 種類のマクロをサポートしています。var マクロは文字列であり、任意の値を割り当てることができます。フォルダーは、上記で定義され、他のマクロに基づいて定義されたベースディレクトリに対する相対パスを表します。MPS はフォルダーマクロ内のパスコンポーネントにコード補完を提供することに注意してください。

  • 依存関係このセクションでは、他のビルドスクリプトへの依存関係を定義します。MPS は、ビルドスクリプト(たとえば buildStandalone、buildWorkbench または buildMPS)のセットがバンドルされています。それらのいずれかへの依存関係を確立することにより、その参照ビルドスクリプトで定義された構造を、参照ビルドスクリプトで使用できます。例: 参照されているビルドスクリプトで定義されているマクロを使用できます。

  • プロジェクト構造このセクションでは、構築する RCP アプリケーションの実際の内容を定義します。そのようなコンテンツは MPS モジュール(言語、ソリューション、devkits)、Java ライブラリ、IDEA ブランディングおよびプラグインかもしれません。

  • デフォルトレイアウトこのセクションは出力されるファイルを定義し、新しい RCP ディストリビューションのディレクトリ、ファイルと JAR 構造を作成します。これは、プロジェクト構造セクションおよびこれが依存する他のビルドスクリプトで定義されているアーティファクトを参照して含めます。

ウィザードは 2 つのビルドスクリプトを作成しました。それぞれが別々の目的を果たします。

  1. Kajak- モジュールを生成し、生成されたソースをコンパイルして、IDEA プラグインにパッケージ化します (IntelliJ IDEA プラットフォーム用のプラグイン)

  2. KajakDistribution - Kajak によって作成されたアーティファクトからプラットフォーム固有のディストリビューションを作成します

ビルドスクリプトを編集する

最初に Kajak ビルドスクリプトに注目しましょう。

生成されたビルドスクリプトの名前

各 MPS ビルドスクリプトから生成する ant xml ファイルのデフォルト名は build.xml です。複数のビルドスクリプト間の衝突を避けるために、名前を変更することをお勧めします。

sa8.png
sa9.png

ベースディレクトリ

ビルドスクリプトが生成されるディレクトリを指定します。

プラグインを使う

ビルド言語は、その機能をプラグインにパッケージ化しています。ビルドスクリプトで使用されるプラグインは、その使用プラグインセクションにリストされています。

  • java - Java ソースをコンパイルする機能を含みます

  • mps - MPS モデルを生成する機能を含みます

  • module-tests - ビルドスクリプトでテストを実行する機能を追加します (jetbrains.mps.build.mps.tests 言語をインポートする必要があります)

ウィザードはすでに javamps を設定しています。

マクロ

スクリプト全体で再利用するマクロをいくつか定義する必要があります。最初の 2 つはビルドで使用する文字列変数を表し、一連のフォルダーは MPS 自体のディレクトリと、MPS にバンドルされた言語が格納される 2 つのルートディレクトリを表します。これらの言語は、RCP ディストリビューションの一部になります。これらのフォルダーはすべて、ベースディレクトリに対してどのように相対的であるかに注意してください。

macros: var date = date 20150422  var build.number = Kajak-139.SNAPSHOT  var version.major = 2020 var version.minor = 2 var version.bugfixNr = <empty> var version.eap = EAP folder mps_home = ./../../../../Applications/MPS 3.2.app/Contents

マクロを未定義のままにして(つまり、名前を指定するだけで)、プロジェクト設定ダイアログの MPS パス変数セクションで定義するか、プロパティ定義を使用して ant を呼び出すときに定義できることに注意してください。

ant -Dsome.variable=a.value

依存関係

次に、依存関係を定義します。依存関係は、このスクリプトが他のどのビルドスクリプトおよびプラットフォームに依存しているかを示します。

mpsStandalone (スタンドアロン MPS インストールの最小セットを表す)への依存関係が必要です。オプションで、スタンドアロン IDE でビルドスクリプトを作成できる mpsMakePlugin 、mpsDebuggerPlugin (ロボット Kaja サンプルにはデバッガーと Java 実行の統合が必要なため)および mps ExecutionPlugin(1 つは、ロボット Kaja サンプル言語が実行フレームワークを使用して外部実行可能ファイルを実行することです。ほとんどの RCP は、mps スタンドアロンを使用する可能性があります。

dependencies: mpsStandalone (artifacts location $mps_home) mpsMakePlugin (artifacts location $mps_home/plugins)   mpsDebuggerPlugin (artifacts location $mps_home/plugins) mpsExecutionPlugin (artifacts location $mps_home/plugins)

アーティファクトの場所は、アーティファクトのコピー元を指定します。ビルドスクリプトは、既存の MPS インストールからコードをコピーすることで機能するため、MPS ソースをチェックアウトする必要はありません。アーティファクトの場所は MPS ホームディレクトリを指している必要があります。

プロジェクト構造

プラグインの使用セクションで指定されたプラグインは、ここで使用可能なオプションに影響を与えます。javamps、および module-tests プラグインを有効にすると、次のプラグインが得られます。

  • ジェネレーターオプション - ジェネレーターを設定する

  • アイデアブランディング - アイコン、スプラッシュスクリーン、URL、イメージなどのスタンドアロン IDE の視覚的側面を設定します。

  • アイデアプラグイン - 生成されたアーティファクトを基盤となる IntelliJ IDEA プラットフォームにフックするための情報の詳細

  • Java ライブラリ - それらがユニットとして参照されることができるように jar とクラスをグループ化します

  • Java モジュール - Java ソースをグループ化して、それらが 1 つのユニットと呼ばれるようにする

  • Java オプション - java コンパイラープロセスを設定します

  • mps group - MPS モジュール(ソリューション、言語、devkits)をユニットとして参照できるようにグループ化します

  • ソリューション - ソリューションを表します

  • language - 言語を表します

  • devkit - devkit を表します

プロジェクト構造では、ブランディングから始めます。アイデアブランディングセクションは、あらゆる種類のアイコン、スプラッシュ画面などの定義をサポートしています。サイズと透明度の値を維持しながら、MPS ディストリビューションから取得し、ニーズに合わせてイメージを変更することをお勧めします。Version プロパティが構造化された値を保持していることに注意してください。ヘルプファイルと更新 Web サイトを指定することもできます。

idea branding Kajak    codename Kajak    company <no company>  Version ${version.major}.${version.minor} ${version.bugfixNr} ${version.eap} codename (optional) <empty>   full name Kajak    build number ${build.number}, date ${date}    icons      16x16 ./icons/MPS16.png      32x32 ./icons/MPS32.png      32x32 opaque ./icons/MPS32.png      128x128 <no icon128>    splash screen ./icons/splash.png textcolor 002387    about screen ./icons/about.png    dialog image ./icons/dialogImage.png    welcome screen      caption ./icons/caption.png      slogan ./icons/slogan.png      logo ./icons/logo.png    <no updateWebsite>    plugins <no plugins>    whats new <no whatsnew>    <no stats>    <no help>    feedback url <no feedbackUrl> 

サンプルでは、MPS アイコンを ./icons フォルダーにコピーし、名前を変更せずにそれに応じて変更しました。これが、ほとんどのアイコンが mps で始まる理由です。

次に、バンドルする言語とソリューションを含むアイデアプラグインを定義します。アイデアプラグインは、MPS が構築されている IDEA プラットフォームへのプラグインです。

idea plugin Kajak    name Kajak    short (folder) name Kajak    description <no description>    version 1.0    << no vendor >>    content:      Kajak    dependencies:      jetbrains.mps.core    << ... >> 

名前とバージョン、他のプラグインへの依存関係、実際のコンテンツを定義できます。RCP に言語が含まれている場合は常に、jetbrains.mps.core が必要になります。これは、BaseConceptINamedConcept インターフェースなどを提供するためです。内容の Kajak エントリは、以下で定義される mps グループへの参照です。mps グループは、MPS アーティファクトのグループです。mps プラグインを (ビルドスクリプトの一番上に) 含めたため、MPS 固有の言語構造を使用できます。mps グループは一例です。

Kajak グループを見てみましょう。一連の言語とソリューションを参照します。言語参照は、MPS プロジェクトで定義された言語を指します。グループ内の言語リファレンスは、名前 (実際の言語の名前と同じである必要があります) と、それぞれの mpl ファイルへのポインタで構成されます。これを入力する最も簡単な方法は、mpl ファイルへのパスから開始し、ファイルインテンション (Alt+Enter) から必要な情報をロードして参照の名前を調整することです。

mps group Kajak    solution jetbrains.mps.samples.JavaKaja      load from ./solutions/JavaKajak/JavaKajak.msd        language jetbrains.mps.samples.KajaAndOr      load from ./languages/KajaAndOr/KajaAndOr.mpl        language jetbrains.mps.samples.Kaja      load from ./languages/Kajak/Kajak.mpl        language jetbrains.mps.samples.KajaSceneConstruction      load from ./languages/KajaSceneConstruction/KajaSceneConstruction.mpl 

グループにはすべての言語の推移閉包が含まれている必要があることに注意してください。たとえば、言語 A を参照していて、それが別の言語 B を参照している場合、グループには言語 B も含まれている必要があります。これは理にかなっています。そうしないと、依存関係を解決できないため、結果として得られる RCP アプリケーションは実行されないからです。言語が欠落している場合は、ビルドスクリプトでエラーが報告されます (赤い波線)。必要な言語を追加した後、エラーが発生した言語でファイルインテンション (Alt+Enter) から必要な情報をロードし直して、何かが変更されたことを「認識」させる必要がある場合があります。

言語に加えて、ソリューション構成要素を使用してソリューションを参照したり、devkit 構成要素を使用して devkit を参照したりすることもできます。

デフォルトレイアウト

レイアウトは RCP ディストリビューション物のディレクトリとファイル構造を構成します。さまざまなソースから、特に前のセクションで説明したプロジェクト構造からファイルをコピーします。また、必要に応じてこれらのファイルをコンパイル、構築、パッケージ化します。このスクリプトが依存する他のビルドスクリプトで定義されているアーティファクトも参照できます。次のコードから始めます。

default layout: import mpsStandalone::languages import mpsStandalone::license

インポートされたこれら 2 つは、参照されている mpsStandalone ビルドスクリプトのフォルダー要素です。インポートすることにより、これらのフォルダーの内容が RCP ディストリビューションにインポート(つまりコピー)されます。

ウィザードには、bin フォルダーを作成し、共通の構成ファイルとプロパティファイルをそのフォルダーにコピーするコードが追加されています。さらにカスタマイズすることも、そのままにしておくこともできます。

folder bin import files from mpsStandalone::bin include log.xml include log4j.dtd file $mps_home/bin/idea.properties replace regex "\.MPS(\w+)" /g -> \.${build.number}

次に、新しいフォルダー lib を作成します。このフォルダーには、MPS ソースと既存の branding.jar (デフォルトの MPS スプラッシュ画面などを含む)を除くすべてのものを mpsStandalone::lib からインポートします。次に、新しい jar ファイル branding.jar を作成します(この名前が機能する必要があります。IDEA プラットフォームはこの名前を想定しています)。このファイルに、上記で定義したプロジェクト構造のブランディングセクションで定義されたすべてのファイルを配置します。

folder lib import files from buildStandalone::lib exclude MPS-src.zip exclude branding.jar jar branding.jar files of idea branding Kajak

次に、フォルダープラグインを作成します。mps-core プラグインはすべての RCP アプリに必要であるため、いずれの場合もインポートする必要があります。次に、mpsStandalone ビルドスクリプトで定義されているさまざまなバージョン管理プラグイン(CVS、SVN anf git)をインポートします。明らかな理由から、スタンドアロンの Kaja IDE にはバージョン管理のサポートが必要なので、これらのプラグインをインポートすることは理にかなっています。最後に、Kaja は MPS デバッガーとも統合されているため、デバッガープラグインを含めます。

folder plugins import mpsStandalone::plugins/svn4idea  import mpsStandalone::plugins/cvsIntegration  import mpsStandalone::plugins/git4idea  import mpsStandalone::plugins/mps-core import mpsDebuggerPlugin::plugins/mps-debugger-api

次に、前にプロジェクト構造で定義された Kajak プラグインを統合します。プラグイン構成要素を使用して、前に定義したプラグインの完全な定義をインポートできます。

plugin Kajak    <empty> 

プラグイン内で、さまざまなライブラリ jar を含むサブディレクトリをさらに定義します。これらの jar ファイルは、プラグインのクラスパスに自動的に表示されます。ファイル構成を使用して、前に定義したマクロを使用して、さまざまなファイルをプラグインディレクトリにコピーします。

plugin Kajak    folder libs      file ./solutions/JavaKajak/images/kaja_images.jar  ...

このプラグインには、コピーした jar だけでなく、必要なすべての言語アーティファクトも含まれていることに注意してください。これは、これらの mps グループを定義し、プラグインから参照することで実現されています。これらの mps グループを使用できるのは、mps ビルド言語プラグインのおかげです。MPS アーティファクトを直接サポートし、必要なすべてのファイルとメタデータが自動的に処理されます。

mps-make をインポートすることもできます。

# optional plugins import mpsMakePlugin::mps-make

プロパティファイル

最後に、実行中の RCP アプリケーションで使用される一連のメタデータを含む build.number というプロパティファイルを作成します。基盤となる IntelliJ プラットフォームで必要です。

properties file build.number build.number = ${build.number} date = ${date} version = 1.0

プラットフォーム固有のディストリビューションの作成

この時点で、生成されたディレクトリ構造は、カスタムブランディングを含む、構成したすべてのアーティファクトを含む MPS ディストリビューションのプラットフォームの独立したコアを構成します。ただし、プラットフォーム固有の側面がまだ不足しているため、実行することはできません。

2 番目に生成されたビルドスクリプト - KajakDistribution を見てみましょう。

build KajakDistribution generates buildDistribution.xml    base directory: ../../               use plugins:    << ... >>    macros:    folder mps_home = ./../../work/MPS 3.2   var version = 1.0    dependencies:    Kajak    project structure:    << ... >>    default layout:    tar ${build.number}-linux.tar.gz (compression gzip)      folder Kajak ${version}        import files from Kajak::/          <any>        folder bin          file $mps_home/bin/linux/fsnotifier (755)          file $mps_home/bin/linux/fsnotifier64 (755)          file $mps_home/bin/mps.vmoptions (644)            fix eol: convert to a single LF, remove eof (Ctrl-Z): true          file $mps_home/bin/mps64.vmoptions (644)            fix eol: convert to a single LF, remove eof (Ctrl-Z): true         files from $mps_home/bin/linux            exclude **/fsnotifier            exclude **/fsnotifier64                  file $mps_home/mps.sh (755)          fix eol: convert to a single LF, remove eof (Ctrl-Z): true            zip ${build.number}.zip  ...

ビルドスクリプトは Kajak に依存しているため、プラットフォームに依存しないアーティファクトをプラットフォーム固有のディストリビューションに適切にパッケージ化できます。mps_home マクロは、単一のプラットフォーム (macOS、Linux、Windows) を対象とするディストリビューションでは他のプラットフォームに必要なアーティファクトが欠落する可能性があるため、汎用の MPS インストールを指します。汎用ディストリビューションは、MPS Web サイトからダウンロードすることもできます。

Windows ディストリビューションを作成する

ビルドスクリプトによって生成される Windows 固有のディストリビューションはありません。生成されたスタンドアロン IDE を Windows で実行するには、生成された汎用 zip ファイルを使用し、win ディレクトリの内容を bin ディレクトリにコピーし、mps.bat ファイルを使用して IDE を起動する必要があります。

sa14.png

ヒントとコツ

MPS 上に構築されたすべてのスタンドアロン IDE は、ユーザーがツールに慣れるのに役立つ便利なヒントを含むヒントとテクニックダイアログをユーザーに提供できます。

blxx6.png

MPS のヒントとコツの内容はカスタマイズできます。これは、新しいビルドスクリプトのヒントとトリックの概念を使用して実行できます。

blxx7.png

ヒントは、MPS 一般ディストリビューション物から再利用することも、ディレクトリまたはソリューションからインポートすることもできます。

blxx8.png
  • 最初のオプションは、ディストリビューションにすべての MPS のヒントを追加するだけです。これは、ビルドスクリプトウィザードで生成されたビルドスクリプトのデフォルトオプションです。

  • 2 つ目は、正しいヒントの構造を持つ手動で作成されたフォルダーを必要とします。目的の構造は、mps-tips.jar ファイル自体から取得できます。すべての HTML ファイルに加えて css と image フォルダーを含むフォルダーを必要とします。

  • 最後のオプションでは、MPS 自体の jetbrains.mps.build.tips および jetbrains.mps.core.xml 言語を使用してヒントを定義できます。

最後に、ヒントをビルドスクリプトレイアウトの lib フォルダーにパッケージ化する必要があります。ウィザードで生成されたビルドスクリプトでは、MPS のヒントとコツがデフォルトで lib フォルダーにパッケージ化されています。

blxx9.png

ヒントとコツの言語

ソリューションからヒントとコツをインポートするには、モデルを使用してソリューションを作成し、モデルの使用言語に言語 jetbrains.mps.build.tipsjetbrains.mps.core.xml を追加します。その後、MPSTipsAndTricks の概念のインスタンスを作成して、そこに複数のヒントを作成することができます。各ヒントは HTML 形式のテキストです。各ヒントに 1 つのイメージを追加できます。

blxx10.png

ソリューションからビルドスクリプトヒントとコツへのインポートは、ソリューションと MPSTipsAndTricks の概念から生成された xml を指すことによって行われます。

blxx11.png
最後の Robot Kaja IDE 構築スクリプト
カジャック
build Kajak generates myBuild.xml    base directory: ../../                   use plugins:    java    mps    macros:    var date = date 20150422    var build.number = Kajak-139.SNAPSHOT    folder mps_home = ./../../../../Applications/MPS 3.2.app/Contents    dependencies:    mpsStandalone (artifacts location $mps_home)    mpsMakePlugin (artifacts location $mps_home/plugins)    project structure:    idea branding Kajak      codename Kajak      company <no company>      version 1.0, eap false      full name Kajak      build number ${build.number}, date ${date}      icons        16x16 ./icons/MPS16.png        32x32 ./icons/MPS32.png        32x32 opaque ./icons/MPS32.png        128x128 <no icon128>      splash screen ./icons/splash.png textcolor 002387      about screen ./icons/about.png      dialog image ./icons/dialogImage.png      welcome screen        caption ./icons/caption.png        slogan ./icons/slogan.png        logo ./icons/logo.png      <no updateWebsite>      plugins <no plugins>      whats new <no whatsnew>      <no stats>      <no help>      feedback url <no feedbackUrl>        idea plugin Kajak      name Kajak      short (folder) name Kajak      description <no description>      version 1.0      << no vendor >>      content:        Kajak      dependencies:        jetbrains.mps.core      << ... >>          mps group Kajak      solution jetbrains.mps.samples.JavaKaja        load from ./solutions/JavaKajak/JavaKajak.msd            language jetbrains.mps.samples.KajaAndOr        load from ./languages/KajaAndOr/KajaAndOr.mpl            language jetbrains.mps.samples.Kaja        load from ./languages/Kajak/Kajak.mpl            language jetbrains.mps.samples.KajaSceneConstruction        load from ./languages/KajaSceneConstruction/KajaSceneConstruction.mpl            default layout:    import mpsStandalone::languages    import mpsStandalone::license    folder bin      import files from mpsStandalone::bin        include log.xml        include log4j.dtd      file $mps_home/bin/idea.properties        replace regex "\.MPS(\w+)" /g -> \.${build.number}          folder lib      import files from mpsStandalone::lib        exclude MPS-src.zip        exclude branding.jar      jar branding.jar        files of idea branding Kajak            folder plugins      import mpsStandalone::plugins/svn4idea      import mpsStandalone::plugins/cvsIntegration      import mpsStandalone::plugins/git4idea      import mpsStandalone::plugins/mps-core      plugin Kajak        folder libs          file ./solutions/JavaKajak/images/kaja_images.jar                # optional plugins      import mpsMakePlugin::mps-make          properties file build.number      build.number = ${build.number}      date = ${date}      version = 1.0          <<additional aspects>>

KajakDistribution

build KajakDistribution generates buildDistribution.xml base directory: ../../ use plugins: << ... >> macros: folder mps_home = ./../../work/MPS 3.2 var version = 1.0 dependencies: Kajak project structure: << ... >> default layout: tar ${build.number}-linux.tar.gz (compression gzip) folder Kajak ${version} import files from Kajak::/ <any> folder bin file $mps_home/bin/linux/fsnotifier (755) file $mps_home/bin/linux/fsnotifier64 (755) file $mps_home/bin/mps.vmoptions (644) fix eol: convert to a single LF, remove eof (Ctrl-Z): true file $mps_home/bin/mps64.vmoptions (644) fix eol: convert to a single LF, remove eof (Ctrl-Z): true files from $mps_home/bin/linux exclude **/fsnotifier exclude **/fsnotifier64 file $mps_home/mps.sh (755) fix eol: convert to a single LF, remove eof (Ctrl-Z): true zip ${build.number}.zip folder Kajak ${version} import files from Kajak::/ <any> folder bin file $mps_home/bin/mps.vmoptions (644) file $mps_home/bin/mps64.vmoptions (644) file $mps_home/bin/mps.exe.vmoptions (644) file $mps_home/bin/mps64.exe.vmoptions (644) folder win files from $mps_home/bin/win exclude **/*.exe filemode folders: <default (755)>, files: 755 files from $mps_home/bin/win include **/*.exe folder linux files from $mps_home/bin/linux exclude **/fsnotifier exclude **/fsnotifier64 file $mps_home/bin/linux/fsnotifier (755) file $mps_home/bin/linux/fsnotifier64 (755) folder nix filemode folders: <default (755)>, files: 755 files from $mps_home/bin/nix folder mac file $mps_home/bin/mac/libbreakgen.jnilib (644) file $mps_home/bin/mac/libbreakgen64.jnilib (644) file $mps_home/bin/mac/restarter (755) file $mps_home/bin/mac/fsnotifier (755) folder Contents folder Resources file $mps_home/bin/mac/Contents/Resources/mps.icns (644) folder MacOS file $mps_home/bin/mac/Contents/MacOS/mps (755) file $mps_home/bin/mac/Contents/Info.plist (644) file $mps_home/mps.sh (755) file $mps_home/mps.bat (755) zip ${build.number}-macos.zip folder Kajak ${version}.app folder Contents import files from Kajak::/ <any> folder Resources file $mps_home/bin/mac/Contents/Resources/mps.icns (644) folder MacOS file $mps_home/bin/mac/Contents/MacOS/mps (755) file $mps_home/bin/mac/Contents/Info.plist (644) folder bin file $mps_home/bin/mac/libbreakgen.jnilib (644) file $mps_home/bin/mac/libbreakgen64.jnilib (644) file $mps_home/bin/mac/restarter (755) file $mps_home/bin/mac/fsnotifier (755) file $mps_home/bin/mps.vmoptions (644) fix eol: convert to a single LF, remove eof (Ctrl-Z): true file $mps_home/bin/mps64.vmoptions (644) fix eol: convert to a single LF, remove eof (Ctrl-Z): true file $mps_home/mps.sh (755) fix eol: convert to a single LF, remove eof (Ctrl-Z): true <<additional aspects>>

ビルドスクリプトの生成と実行

ビルドスクリプトにエラーがないと仮定すると、エラーを生成できます(モデルの再構築または Ctrl-F9)。これにより、各ビルドスクリプトの上部で定義されている名前が設定された 2 つの ant ファイルが作成されます。

build Kajak generates myBuild.xml

この myBuild.xml (この場合)は、プロジェクトディレクトリに直接存在します。ファイルは、コマンドラインから(ant -buildfile myBuild.xml を使用して)実行することも、MPS 内から直接(プロジェクトエクスプローラーのビルドスクリプトのコンテキストメニューを介して)実行することもできます。

sa10.png

生成されたディレクトリ構造の確認

両方のビルドスクリプトを実行します。次の図は、ビルドスクリプトを実行した後のプロジェクト構造を示しています。特に、build/artifacts ディレクトリ内には、ビルドスクリプトのデフォルトのレイアウトセクションで定義された構造が作成されています。

sa13.png
sa12.png

ディレクトリとファイル構造を参照して、表示されているものをビルドスクリプトの定義に接続することをお勧めします。

JDK の設定

MPS を実行するには、実行用に構成された JDK が必要です。スタンドアロン IDE についても同様です。理想的には、MPS ディストリビューションの一部であり、$MPS_HOME/jbr フォルダーにある JetBrains JDK を使用して実行する必要があります。ビルドスクリプトを使用して、または手動で、MPS の jbr をスタンドアロン IDE にコピーできます (IDE と一緒に JetBrains JDK をディストリビューションする場合)。

起動すると、スタンドアロン IDE のランチャーは、次の場所をこの順序でテストして JDK が存在するかどうかを確認します。次に、最初に見つかった JDK を使用して IDE を実行します。

Windows の場合:

  • MPS_JDK 環境変数

  • mps64.exe.jdk システムプロパティ

  • ..\jbr フォルダー(JetBrains JDK が IDE にバンドルされていると仮定)

  • JDK_HOME 環境変数

  • JAVA_HOME 環境変数

Linux の場合:

  • MPS_JDK 環境変数

  • .../mps.jdk、.../jbr、.../jbr-x86 フォルダー(JetBrains JDK が IDE にバンドルされている場合、これらのフォルダーのいずれか)

  • JDK_HOME 環境変数

  • JAVA_HOME 環境変数

  • システムの定義済み Java ディストリビューションセットアップの $PATH の場所に「java」

MacOS の場合:

  • システムの定義済み Java ディストリビューションセットアップの $PATH の場所に「java」

スタンドアロン IDE での信頼プロジェクトダイアログ

IntelliJ ベースの IDE でプロジェクトを開くと、開かれているプロジェクトの一部である有害なコードが実行される可能性があることをユーザーに警告するために、プロジェクトを信頼するダイアログがプラットフォームに追加されました。

Trust プロジェクトダイアログは MPS 2021.3 の一部になりました。ただし、ダイアログを MPS プロジェクトに適用するには追加のカスタマイズが必要だったため、MPS では無効にすることが決定されました。2021.3 のダイアログにはプレビューボタンが含まれていますが、MPS はプロジェクトをセーフモードで開くことができないため、MPS アプリケーションには関係ありません。MPS 自体では無効になっていますが、MPS 2021.3 のビルドスクリプトウィザードにより、顧客のスタンドアロン IDE でプロジェクトを信頼するダイアログが有効になりました。MPS 2022.2 以降、採用された 2 ボタンのプロジェクトを信頼するダイアログは、MPS と MPS ベースのスタンドアロン IDE の両方で有効になっています。2022.2 以降のビルドスクリプトウィザードにより、スタンドアロン IDE でこの新しいダイアログが有効になります。MPS 2021.3、2022.2 以降のビルドスクリプトウィザードによって作成され、2022.2 以降を使用してビルドされたスタンドアロンアプリケーションには、新しい「2 ボタン」プロジェクトを信頼するダイアログが提供されます。

スタンドアロンの MPS ベースの IDE でプロジェクトを信頼するダイアログを無効にするには、起動スクリプトまたは「vmoptions」構成ファイルで -Didea.trust.disabled=true vm オプションを使用します。

スタンドアロン IDE で新しい UI を無効 / 有効にする

MPS は従来の UI と新しい UI、スタンドアロン IDE をサポートしているため、ビルドスクリプトでは、生成されたスタンドアロン IDE のユーザーに対して新しい UI を有効または無効にする方法が提供されます。

現在、IDE のユーザーに提供される UI バリアントに影響し、ビルドスクリプトで指定 / 変更できる vm オプションが 2 つあります。

  • -Dide.experimental.ui は、 IDE の新規ユーザーに対して新しい UI をオンまたはオフに切り替えます。このオプションは、2023.3 および 2024.1 のスタンドアロン IDE ビルドスクリプトでは false に設定されています。

  • -Dexperimental.ui.used.once が存在する場合、新しい UI をユーザーに通知するツール内の自動プロモーションが無効になります。このオプションは、2023.3 および 2024.1 のスタンドアロン IDE ビルドスクリプトではデフォルトでオンに設定されています。

新しく生成された IDE には、ジェネレーターによって設定された -Dexperimental.ui.used.once プロパティが設定されます。既存の起動スクリプトは手動で変更するか、MPS の新しいバージョンで再生成する必要があります。スタンドアロン IDE のユーザーに対してバナーを有効にする場合は、ビルドスクリプトからプロパティを手動で削除します。

MPS 2024.2 では、新しい UI がデフォルトのオプションになる可能性が高く、新しく作成されたビルドスクリプトにそれが反映されます。

関連ページ:

プロジェクトのセキュリティ

潜在的なセキュリティリスクを防ぐために、MPS では、プロジェクトのソースがわからない場合にプロジェクトを開く方法を決定できます。MPS は、オープニングプロセス中に実行されるタスクまたは構成について警告し、信頼できるソースを構成できるようにします。不明なソースからプロジェクトを開く:プロジェクトを開くと、MPS を使用すると、未知ソースコードを含むプロジェクトの処理方法をすぐに決定できます。プロジェクトを初めて開くたびに、IDE にプロジェクトを信頼ダイアログが表示されます。これは、プロジェ...

MPS 言語プラグインの構築

言語セットを作成し、それを対象ユーザーが利用できるようにしたいと考えています。このドキュメントでは、言語セットを、それらが依存するランタイムと一緒に、有効な MPS プラグインにパッケージ化する方法について説明します。注: MPS に付属の JavaExtensionsSample サンプルプロジェクトには、サンプルの Java 拡張機能をビルドしてプラグインにパッケージ化するための完全に機能的なビルドスクリプトが含まれています。そこからインスピレーションを受けることができます。出発点:あなた...

ブートストラップ依存関係の問題の除去

定義::いつでもそれ自体を使用する言語または、言語を使用し、その言語が機能するために同じソリューションを必要とする(つまり、間接的または直接依存する)ソリューション、ブートストラップ依存関係の問題があります。なぜこれが問題なのですか:ビルドスクリプトを使用してプロジェクト全体をゼロから再構築することはできません、生成されたアーティファクトを VCS リポジトリに保持する必要があります、このブートストラップ依存関係サークルは、プロジェクトが完全に一から再構築されることを防ぎます。代わりに、言語を...