2021年12月26日日曜日

7: 本サイトの任意のサンプルプロジェクトをビルドする

<このシリーズの前の記事 | このシリーズの目次 | このシリーズの次の記事>

本サイトからあるサンプルプロジェクトを入手されましたか?そのプロジェクトをビルドする方法がここにあります。

話題


About: UNO (Universal Network Objects)
About: LibreOffice
About: Apache OpenOffice
About: Javaプログラミング言語
About: C++
About: C#
About: Pythonプログラミング言語
About: LibreOffice Basic
About: Apache OpenOffice Basic
About: BeanShell
About: JavaScript

この記事の目次


開始コンテキスト


  • 読者は、UNOプログラムをLinuxまたはMicrosoft Windowsにて開発するための環境を構築した、ある以前の記事(Linux用またはMicrosoft Windows用)にしたがって。
  • 読者は、自身のオペレーティングシステムにおける基本的な操作の知識(テキストエディタを使う、ターミナルを使う)を持っている。

ターゲットコンテキスト



  • 読者は、本サイトに引用されている任意のサンプルプロジェクトをビルドする方法を知る。

オリエンテーション


本サイトにはいくつかのサンプルプロジェクトが引用されています(いくつかのシリーズに含まれています: LibreOfficeまたはApache OpenOfficeを活用するC++を理解することをお許しくださいJavaプログラミング言語を理解することをお許しください)。


本体

ト書き
Special-Student-7、Objector 7A、Objector 7Bがコンピュータの前にいる。


1: 本記事の趣旨


Special-Student-7
本記事では、本サイトから入手された任意のサンプルプロジェクトをビルドする方法を見ます。

Objector 7A
どのサンプルプロジェクトだ?サンプルプロジェクトなど俺は何も入手してないぞ . . .

Special-Student-7
サー、そうしたサンプルプロジェクトたちが以降の複数記事で紹介されます。

Objector 7A
ああ、じゃあ俺は未来の記事を既に読んだものと想定されてるわけか。 . . . 俺はタイムトラベラーか?

Special-Student-7
プロジェクトをビルドする方法を以降の記事毎に説明したくないので、説明が事前にここ一箇所にあるわけです。

もしも、本シリーズを先頭から順次にお読みでしたら、本記事は無意味に思えるかもしれず、なんらかのプロジェクトをオファーする以降の記事に遭遇なさるまで、本記事は安全にとばすことができます。

Objector 7A
じゃあ、そうする。

ト書き
Objector 7Aは立ち去る。

Special-Student-7
開発環境がある以前の記事(Linux用またはMicrosoft Windows用)にしたがって準備済みであると想定されています。

Objector 7B
私の環境を「あなたの記事にしたがわせる」必要はないでしょう?

Special-Student-7
マダム、もちろん、あなたは私の記事にしたがわずにご自分の環境をお持ちになれます、しかし、私のプロジェクトはどれもGradleをビルドツールとして用いているので、あなたはご自分のビルドコンフィギュレーションを用意しないといけないかもしれません、それに、プロジェクトは大抵私のユーティリティプロジェクト群に依存しており、それらユーティリティプロジェクト群はいくつかのプロダクトを用いているので、あなたはそれについて何かしなければならないかもしれません。

Objector 7B
"それについて何かし"ろと言われても、それらのプロダクトをインストールするしか選択肢がないんでしょう?

Special-Student-7
ソースファイル群を変更してそうした依存を切り離すことができます、もしも、お望みでしたら。

Objector 7B
ふーむ . . .

Special-Student-7
いずれにせよ、私はあなたに面倒がないよう試みているだけであって、あなた自身の方法でやられることを禁止しているわけではありません。


2: 当該ZIPファイルをダウンロードし展開する


Special-Student-7
ある記事があるサンプルプロジェクトをオファーするとき、そのプロジェクトは、その記事ページからダウンロードできるZIPファイルに含まれています。

Objector 7A
どこへだ?

Special-Student-7
おお、立ち去られたものと思っていましたが、サー。

Objector 7A
未来から帰ってきた。

Special-Student-7
えーと、どこでもダウンロードされたいところに、サー: それは後で展開して削除するアーカイブファイルなので、ZIPファイルの位置はどうでもかまいません。展開の位置が重要です。

Objector 7A
どこへ展開すればよい、それでは?

Special-Student-7
どこでも展開なさりたい位置へ、しかし、基本的には、本サイトのサンプルZIPファイルたちは同一ディレクトリ(それを私たちは'開発ディレクトリ'と呼びましょう)へ展開されるように意図されています: プロジェクト群共通のGradleビルドスクリプト群があり、そうすることで、ただ一度のコンフィギュレーションで済ますことができます。しかしながら、 . . .

Objector 7A
"しかしながら"?

Special-Student-7
それらの共通Gradleビルドスクリプト群は頻繁に変更される(場合によっては以前のバージョンと非互換に)ので、それらのファイルを上書きすると、古いプロジェクトたちを壊すかもかもしれません。

Objector 7A
それは問題だろ?

Special-Student-7
その場合、それら壊れたプロジェクトの新しいバージョンを本サイトからダウンロードできます、または、サンプルプロジェクト毎に開発ディレクトリを作成するよう選択することもできます、その場合、勿論、開発ディレクトリ毎のコンフィギュレーションが必要になります。

Objector 7A
そういうケースにはZIPファイル群を更新すると言っているのか?

Special-Student-7
それが私の意図です。

Objector 7A
なぜ、変更を互換であるようにしないのか?

Special-Student-7
なぜなら、それらビルドスクリプト群を根本的に変更することが望ましいと時々感じるからです。

Objector 7A
. . .

Special-Student-7
それは、ユーティリティプロジェクト群についても同じです。

Objector 7A
"ユーティリティプロジェクト群"とは何だ?

Special-Student-7
サンプルプロジェクトは、通常そうした、ほとんどのサンプルプロジェクトに共通で使われるプロジェクト群に依存しています。

Objector 7A
そうしないといけないのか?

Special-Student-7
しないといけません、重複したコードが散らばることのないようにするには。

Objector 7A
それで、そうした共通プロジェクト群が非互換に変更されるかもしれないと言っているのか?

Special-Student-7
はい、そうです。

Objector 7A
それで、それらのプロジェクト群を上書きすると古いプロジェクトが壊れるかもしれないと . . .

Special-Student-7
その場合、壊れたプロジェクトの新バージョンを本サイトからダウンロードするか、もしくは、サンプルプロジェクト毎に開発ディレクトリを作成することができます。


3: 開発ディレクトリの構造を理解する


Special-Student-7
開発ディレクトリには、プロジェクト群に共通なGradleビルドスクリプトがいくつかあります。

また、'commonVolatileProperties.gradle_Template'もあり、それは、環境毎に変わりがちなセッティングを格納したコンフィギュレーションファイルのテンプレートです。

Objector 7A
それらのセッティングはプロジェクト群に共通だと言っているのか?

Special-Student-7
はい: それらのセッティングはプロジェクト群に共通のものです、それらは環境に依存しますが。

Objector 7A
ははあ。

Special-Student-7
'commonVolatileProperties.gradle_Template'というファイル名を'commonVolatileProperties.gradle'に変更して、セッティングをそのファイルに設定される必要があります。

実際には、以下が、セットされるように想定されているプロパティ群です。

パラメータ名
c_javaCompilerJavaコンパイラ('c_jdkCompiler'または'null')('null'にセットすると、プロジェクト群に含まれる全てのJavaソースファイル群が無視されます)
c_cplusplusCompilerC++コンパイラ('c_gccCompiler'または'c_visualStudioCplusplusCompiler'または'null')('null'にセットすると、プロジェクト群に含まれる全てのC++ソースファイル群が無視されます)
c_csharpCompilerC#コンパイラ('c_dotnetCsharpCompiler'または'null')('null'にセットすると、プロジェクト群に含まれる全てのC#ソースファイル群が無視されます)
c_pythonCompilerPythonコンパイラ('c_theBiasPlanetPythonCompiler'または'null')('null'にセットすると、プロジェクト群に含まれる全てのPythonソースファイル群が無視されます)
c_additionalLibrariesDirectoryPath付加的ライブラリ群のディレクトリパス、いくつかのプロジェクトがそうしたライブラリ群を必要とする時
c_javaFxDirectoryPathOpenJFXのディレクトリパスまたは'null'
c_javaCheckStyleJarFilePathJava Check Style Jarファイルのパスまたは'null'
c_javaCheckStyleConfigurationFilePathJava Check Styleコンフィギュレーションファイルのパスまたは'null'
c_visualStudioDirectoryPathVisual Studio IDEのベースディレクトリパス
c_visualStudioVersionVisual Studioバージョン(Visual Studio IDEのベースディレクトリ配下のサブディレクトリ名)
c_windowsSdkDirectoryPathWindows SDKのベースディレクトリパス
c_windowsSdkVersionWindows SDKバージョン(Windows SDKのベースディレクトリ配下のサブディレクトリ名)
c_wxWidgetsDirectoryPathwxWidgetsのベースディレクトリ
c_wxWidgetsLibrariesSubDirectoryNamewxWidgetsのベースディレクトリ配下のライブラリ群サブディレクトリの名前
c_openSslDirectoryPathOpenSSLのベースディレクトリパス
c_officeDirectoryPathLibreOfficeまたはApache OpenOfficeのベースディレクトリパス
c_officeAdditionalHeaderFilesBaseDirectoryPathLibreOfficeまたはApache OpenOfficeの付加的ヘッダーファイル群のベースディレクトリパス

当ファイルで使われているプロパティ群は、以下の値を持っています。

プロパティ名
c_operatingSystemNamePropertyNameオペレーティングシステム名Javaプロパティの名前
c_operatingSystemNameLinux"Linux"
c_projectDirectoryPath対象プロジェクトのディレクトリパス
c_operatingSystemDirectoriesDelimiter当該オペレーティングシステムのディレクトリ間デリミッタ('/'または'\')

名前が"Path"で終わっているものはどれも'java.nio.file.Path'インスタンスであって、Stringインスタンスではないことにご注意ください。

Objector 7B
だとしたら何なの?

Special-Student-7
'c_officeDirectoryPath'にStringインスタンスをセットすることはできません、例えば。

Objector 7B
じゃあ、どうすればいいの?

Special-Student-7
'java.nio.file.Paths.get (%パス文字列%)'しさえすれば、そのパス文字列に対応する'Path'インスタンスができます。

Objector 7B
えーと、そこにある、無意味に見える".toString ()"はそこで何をしてるわけ?

Special-Student-7
ああ、'${}'を含む表現は、本当にはJava Stringにはならず、Groovy文字列になり、'.toString ()'はそれをJava Stringにしています。

Objector 7B
Groovy文字列じゃあだめなわけ?

Special-Student-7
大抵は構わないのですが、その違いの罠に私は度々引っかかったので、それをJava Stringにする習慣を私は持っています。

いずれにせよ、おやりになりたいかもしれないことは、'null'をあなたが使われないコンパイラー群にセットすることです: 私は通常、プロジェクトを複数プログラミング言語でオファーしますが、あなたは通常、それをある1つのプログラミング言語で欲しいでしょう。'null'をセットされなければ、不必要なコンパイルが走ろうとし、失敗するかもしれません。

Objector 7B
了解。

Special-Student-7
開発ディレクトリ内の'build.gradle'ファイルは、開発ディレクトリ配下の全プロジェクトビルドするGradleビルドスクリプトです。

開発ディレクトリ直下のディレクトリ群(名前が'.'で始まるディレクトリを除く)が、プロジェクトディレクトリたちで、その各々が'build.gradle'ファイルを持っており、それがGradleプロジェクトスクリプトです。

ソースファイル群は、'source'ディレクトリ配下にあり、プログラミング言語別のディレクトリ('unoIdl'、'java'、'cplusplus'、等)および'resource'ディレクトリに分かれています。

Objector 7A
"'resource'ディレクトリ"?

Special-Student-7
それは、Jarマニフェストファイル、UNO拡張機能のマニフェストファイルおよび関連コンフィギュレーションファイル群、等を格納しています。

Objector 7A
ははあ。

Special-Student-7
当初は存在しませんが、'intermediate'ディレクトリおよび'target'ディレクトリがビルドプロセスで生成されます。'target'ディレクトリはターゲットファイルを格納します(例えば、UNO拡張機能ファイル、もしも当該プロジェクトがUNO拡張機能プロジェクトであれば)。'intermediate'ディレクトリは中間ファイル群(例えば、クラスファイル群、もしも当該プロジェクトがJavaコードを含んでいたら)。


4: 当該プロジェクトまたは全プロジェクトをビルドする


Special-Student-7
あるプロジェクトをビルドしたいというときは、ターミナルを開き、カレントディレクトリを当該プロジェクトディレクトリへ変更し、以下のコマンドを実行します、もしも、Gradleが無慈悲にシンボリックリンクを解決する問題に直面しなければ。

@bash or CMD ソースコード
gradle

Objector 7A
もしもその長々しい名前の問題に直面したら?

Special-Student-7
開発ディレクトリ内にある'Gradle.sh'を使用することができます、'gradle'の代わりに。

Objector 7A
ああ。

Special-Student-7
もしも、当該プロジェクトがUNO拡張機能プロジェクトだったら、ビルドプロセスは、LibreOfficeおよびApache OpenOfficeのプロセス群をシャットダウンし、当該UNO拡張機能を登録し、LibreOfficeまたはApache OpenOfficeプロセスを開始しようとします。

Objector 7A
私はそうして欲しくないのだが。

Special-Student-7
それでは、以下のようにしてください。

@bash or CMD ソースコード
gradle i_makeUnoExtensionTask

その場合、当該UNO拡張機能はご自身で登録される必要があります。

Objector 7A
分かった。

Special-Student-7
プロジェクトがビルドされる際は、そのプロジェクトが参照している全プロジェクトも自動的にビルドされます。

開発ディレクトリ内の全プロジェクトをビルドすることも、カレントディレクトリを開発ディレクトリへ変更して'gradle'コマンドを実行することで行なえます。


5: 当該プログラムを実行する


Special-Student-7
当該プロジェクトが実行可能プログラムたち(複数なのは、そのプロジェクトは複数のプログラミング言語を対象としているかもしれないため)のものである場合、そのプログラムたちの1つは、以下のようにして実行できます、カレントディレクトリを当該プロジェクトディレクトリにして、プログラミング言語毎に。

Javaの場合:

@bash or CMD ソースコード
gradle i_executeJarTask -Pi_mainClassName="%メインクラス名%" -Pi_commandLineArguments="%コマンドライン引数群%"

C++の場合:

@bash or CMD ソースコード
gradle i_executeCplusplusExecutableFileTask -Pi_commandLineArguments="%コマンドライン引数群%"

C#の場合:

@bash or CMD ソースコード
gradle i_executeCsharpExecutableFileTask -Pi_commandLineArguments="%コマンドライン引数群%"

Pythonの場合:

@bash or CMD ソースコード
gradle i_executePythonExecutableFileTask -Pi_mainModuleName="%メインモジュール名%" -Pi_commandLineArguments="%コマンドライン引数群%"

'i_commandLineArguments'プロパティ値の中は適切にエスケープされなければなりません、もしも、ダブルクウォーテーションがそこで使われるのであれば、例えば以下のように。

@bash or CMD ソースコード
-Pi_commandLineArguments="\"第1引数値\" \"第2引数値\""


参考資料


<このシリーズの前の記事 | このシリーズの目次 | このシリーズの次の記事>