MPS 2020.3 ヘルプ

MPS と ant の使い方

MPS と ant を使った作業

もちろん、コードを編集するには MPS エディターが必要です。しかし、モデルの生成と
実行中のテストは、コマンドラインから実行して自動と統合できます
ビルドします。Ant がベースとして使用されます。このセクションでは、MPS の使用方法について説明します
コマンドラインから ant 経由で。

すべての例で、を定義する build.properties ファイルを使用します。
次の 2 つのプロパティ:

mps.home = // installation directory of MPS itself mbeddr.home = // the root directory relative to which all other directories // to projects etc. are specified

この build.properties ファイルは、ここで説明するすべてのビルドスクリプトに含まれています。
このセクションで。さらに、MPS 固有のタスクのセットを定義する必要があります
ant の taskdef 要素を使用します。また、いくつかの JVM オプションが再利用されます
何度も。以下はすべてのビルドファイルのスケルトンです。
議論する予定です:

<project name="com.mbeddr.core build and test" default="all"> <property file="build.properties"/> <path id="mps.ant.path"> <pathelement location="${mps.home}/lib/mps-backend.jar"/> <pathelement location="${mps.home}/lib/jdom.jar"/> <pathelement location="${mps.home}/lib/log4j.jar"/> <pathelement location="${mps.home}/lib/mps-core.jar"/> </path> <taskdef resource="jetbrains/mps/build/ant/antlib.xml" classpathref="mps.ant.path"/> <jvmargs id="myargs"> <arg value="-ea"/> <arg value="-Xss1024k"/> <arg value="-Xmx1024m"/> <arg value="-XX:MaxPermSize=92m"/> <arg value="-XX:+HeapDumpOnOutOfMemoryError"/> </jvmargs> <!-- here is the place where all the following example code goes --> </project>

プロジェクトで言語を構築する

まず、プロジェクトのコンテンツを作成します。これが必要な ant コードです
上記のスケルトン ant ファイルで囲む必要があります。

<property name="project.mpr" value="relative/path/to/project/project.mpr"/> <target name="build-languages-in-project"> <mps.generate> <jvmargs refid="myargs"/> <project file="${mbeddr.home}/${project.mpr}"/> </mps.generate> </target>

プロジェクト内のすべてのモジュールが生成されます。モジュールのサブセットのみの場合
プロジェクトを生成する必要があります。modules ファイルセットを使用できます。ザ・
次のコードは、プロジェクト内のすべての言語を生成します。通常、彼らは住んでいます
プロジェクトの languages ディレクトリにあります。の定義方法に注意してくださいと
は対照的に、プロジェクトディレクトリを指す別のプロパティ
プロジェクト .mps ファイル。

<property name="project.mpr" value="relative/path/to/project/project.mpr"/> <property name="project.dir" value="relative/path/to/project"/> <mps.generate> <jvmargs refid="myargs"/> <project file="${mbeddr.home}/${project.mpr}"/> <modules dir="${mbeddr.home}/${project.dir}/languages"/> </mps.generate>

プロジェクトをコンパイル可能にするために、他の言語にアクセスする必要がある場合があります。
これらは、dir 属性がしなければならないライブラリ要素で追加できます。
(直接、またはさらに下に)必要なものが含まれているディレクトリを指す
言語。

<property name="some.other.project.dir" value="relative/p/to/other/project"/> <mps.generate> <jvmargs refid="myargs"/> <project file="${mbeddr.home}/${project.mpr}"/> <library name="irrelevantName" dir="${mbeddr.home}/${some.other.project.dir}/languages"/> </mps.generate>

生成 / 構築ソリューション

DSL で書かれたコードを含むソリューションを構築することは基本的にではありません
言語の構築とは異なります。ただし、
ライブラリが正しく、言語を含むディレクトリを指すようにします
ソリューションで使用されます。

<!-- project with solutions that should be built --> <property name="solutionproject.dir" value="path/to/some/solution/project"/> <!-- two projects that contain languages used by solutionproject --> <property name="langproject.dir" value="path/to/some/project"/> <property name="other.langproject.dir" value="path/to/other/project"/> <target name="build-solutions"> <mps.generate> <jvmargs refid="myargs"/> <!-- set up libs to point to the lang projects --> <library name="langproject" dir="${mbeddr.home}/${langproject.dir}"/> <library name="other.langproject" dir="${mbeddr.home}/${other.langproject.dir}"/> <!-- generate two solutions in the project --> <modules dir="${mbeddr.home}/${solutionproject.fit}/solutions/solution1"/> <modules dir="${mbeddr.home}/${solutionproject.fit}/solutions/solution2"/> </mps.generate> </target>

テストの実行

MPS は、テストに使用できる特別なテスト言語をサポートしています
制約、型システム規則、エディター機能。これらのテストは実行できます
ソリューションまたはモデルのコンテキストメニューから実行オプションを使用して UI から
(下の図を参照)。

Runtests

これらのテストはコマンドラインからも実行できます。これが必要とするコードです:

<!-- make this point to some temp directory --> <property name="mps.platform.caches" value="tmp"/> <!-- path to project .mpr with the tests in it --> <property name="project.mpr" value="relative/path/to/project/project.mpr"/> <target name="run-tests"> <delete dir="${mps.platform.caches}"/> <junit haltonfailure="true" showoutput="true" fork="true" dir="${mps.home}"> <jvmarg value="-ea"/> <jvmarg value="-Xss1024k"/> <jvmarg value="-Xmx1200m"/> <jvmarg value="-XX:MaxPermSize=128m"/> <jvmarg value="-XX:+HeapDumpOnOutOfMemoryError"/> <sysproperty key="idea.system.path" value="${mps.platform.caches}/system"/> <sysproperty key="idea.config.path" value="${mps.platform.caches}/config"/> <sysproperty key="idea.plugins.path" value="${mps.platform.caches}/plugins"/> <sysproperty key="mps.junit.project" value="${mbeddr.home}/${project.mpr}"/> <sysproperty key="mps.junit.pathmacro.mbeddr.home" value="${mbeddr.home}"/> <classpath> <fileset dir="${mps.home}/lib"> <include name="**/*.jar"/> </fileset> <fileset dir="${mps.home}/plugins"> <include name="**/*.jar"/> </fileset> </classpath> <test name="jetbrains.mps.testbench.junit.suites.DefaultTestSuite"/> <formatter type="xml"/> </junit> </target>

ここで重要な要素は、2 つのシステムプロパティです。
mps.junit.project および mps.junit.pathmacro.mbeddr.home 最初の 1 つ
テストを含むプロジェクトを指定します。2 つ目はもう少しです
関与。構文 mps.junit.pathmacro.XXX は、パスの値を設定します
MPS プロジェクトの変数 XXX テストを正しく実行するために、
プロジェクトファイルを指すプロジェクト内の TestInfo ノードになります。この
1 つはパス変数(MPS 設定で定義)を使用して、
ファイルシステム内のさまざまなマシンとさまざまな場所。ザ・
mps.junit.pathmacro.mbeddr.home thingy はの値を提供するために使用されます
コマンドラインからのマクロ。

Testinfo