2018-07-01

6: Building an Environment for Developing UNO Programs in Windows

<The previous article in this series | The table of contents of this series | The next article in this series>

For developing macros, external UNO programs, and/or UNO extensions in Java, C++, .NET Framework (usually C# and/or Visual Basic.NET), and/or Python.

Topics


About: UNO (Universal Network Objects)
About: LibreOffice
About: Apache OpenOffice
About: Java programming language
About: C++
About: .NET Framework
About: Python programming language

The table of contents of this article


Starting Context



Target Context


  • The reader will know how to build an environment for developing UNO programs (macros, external UNO programs, and/or UNO extensions) in Windows.

Orientation


An environment for Linux has been built in the previous article.

The knowledges of UNO and the basic elements of UNO are required for judging what are required for your environment.

.NET Core and Mono cannot be used for any C# or Visual Basic.NET UNO program to work (at least, for LibreOffice 7.0.3 and older).

This site uses a text editor and Gradle, not any IDE, and presents reasonable explanations that should be able to be applied to your favorite IDE (if you will).

We will see various sample programs that can be built in this environment, in some future articles.


Main Body

Stage Direction
Here are Hypothesizer 7, Objector 6A, and Objector 6B in front of a computer.


1: What Are (at Least Almost) Absolutely Required?


Hypothesizer 7
Let us clarify what are (at least almost) absolutely required.

By "absolutely required", I mean that they are required whatever your taste is.

For example, any IDE is not absolutely required.

Objector 6A
Huh? Of course, it is. I need Visual Studio for developing C# programs.

Hypothesizer 7
No, you do not, sir: you need only .NET framework SDK.

Objector 6A
But everybody uses Visual Studio!

Hypothesizer 7
That is a false statement, sir, because at least I do not use either. I propose refraining from such sloppy usage of 'every', 'all', etc..

Anyway, what are absolutely required are conditional on what you are developing. For example, if you are developing a C++ UNO program, a C++ compiler is at least almost absolutely required, but otherwise, it is not.

I said "at least almost" because you could manually compile your C++ source without any compiler, but most probably, you will not.

Furthermore, I say here that Visual C++ is at least almost absolutely required, because using GCC seems very hard if not impossible, which is because the LibreOffice C++ libraries have been built with Visual C++.

Anyway, these are (at least almost) absolutely required.

ArtifactRequired When
a LibreOffice or Apache OpenOfficein any case
the corresponding LibreOffice SDK or Apache OpenOffice SDKyou develop any UNO datum type
and/or
you develop any C++ UNO program
a JDKyou develop any Java UNO program
a Visual C++you develop any C++ UNO program
some headers and libraries included in Windows SDKyou develop any C++ UNO program
.NET Framework SDKyou develop any .NET Framework (usually C# or Visual Basic.NET ) UNO program
the corresponding Python UNO (is probably included in the LibreOffice or Apache OpenOffice)you develop any Python UNO program

Note that Python itself is required if you develop Python programs, but it will be automatically installed with the Python UNO, which is the reason why it is not cited separately above.

Objector 6B
"is probably included" is vague . . .

Hypothesizer 7
Madam, being included or not depends on the packaging. The packages in the official site include ones, but there may be some packages that do not, somewhere.


2: What Is Our Development Environment Like?


Hypothesizer 7
As we will install also some non-absolutely-required products (because they are used by some programs introduced in this site), if you do not need some of them, of course, you can skip them.

This is our environment here, as of 2020-11-26.

Platform: Windows 10 x86-64

ArtifactUsed for
LibreOffice 7.0.3 or Apache OpenOffice 4.1.8developing any UNO program
LibreOffice SDK or Apache OpenOffice SDK (the corresponding version)developing any UNO datum type and developing any C++ UNO program
OpenJDK 15.0.1 + OpenJFX 15.0.1developing any UNO program (required in order to make Gradle work, even if you do not develop any Java program); OpenJFX is not required if you do not use JavaFX.
Gradle 6.7.1developing any UNO program
Visual Studio C++ 2019 + Windows SDK for UWP C++ Apps + Windows SDK for Desktop C++ amd64 Apps + wxWidgets 3.0.5 + OpenSSL 1.1.1hdeveloping any C++ UNO program; wxWidgets is not required if you do not use it; OpenSSL is not required if you do not use it.
.NET Framework SDK 4.8developing any .NET Framework UNO program
Python (the corresponding version) + mypy (the corresponding version) + wxPython 4.1.0developing any Python UNO program (an external Python is used in this site); mypy is not required if you do not use it; wxPython is not required if you do not use it.

Objector 6A
You use Visual Studio after all!

Hypothesizer 7
I do not use the IDE, but use only the compiler, the linker, some header files, and some libraries. I really do not want to install unnecessary things (Visual Studio takes 673 MB in the system drive and 2.71 GB in total, even with the minimal components selection), but there does not seem to be another way to get the compiler, unfortunately.

Objector 6A
"Gradle"?

Hypothesizer 7
It is a build tool.

Objector 6A
I use Visual Studio, OK?

Hypothesizer 7
You are very free to use any IDE, but I just point out that as my programs in this site come with Gradle build scripts, they will not be able to be built as they are, without Gradle. Note that my Gradle scripts do not do only usual compiling and linking but also perform UNO specific tasks (for example, compiling UNOIDL files, creating UNO datum types merged files, creating programming-language-specific files from UNO datum types merged files, creating UNO extension files, and registering UNO extensions).

As for usual compiling and linking, your IDE will be able to do by just referring to the necessary header files and libraries, but as for UNO specific tasks, you will have to think how you make your IDE perform them.

Objector 6A
. . .

Hypothesizer 7
Do not worry: we will see what have to be referred to by your IDE, for each artifact.


3: Installing and Configuring Artifacts



3-1: Some Notes


Hypothesizer 7
As I have a habit of not using any space in any directory name, my build scripts have been tested only for directories whose names do not have any space. If there is a problem for directories whose names have spaces, I am sorry.

Objector 6A
"I am sorry." . . . Is that it?

Hypothesizer 7
If you encounter a problem, you can curse me and fix Gradle build scripts, or you can curse me and change the directory names.

Objector 6A
Then, I will curse you and won't use any space in any directory name.

Hypothesizer 7
Note that the expression, %USERNAME%, in the following descriptions means the current operating system user name. So, please replace it with your operating system user name as needed.


3-2: Installing and Configuring LibreOffice


Hypothesizer 7
We will install LibreOffice. If you are going to use Apache OpenOffice, this will be unnecessary.

We download an install package file from the LibreOffice download Web page into somewhere, and install the package.

Stage Direction
Hypothesizer 7 starts a Web browser, downloads a Windows 64bit install package file, starts an File Explorer instance, double-clicks the package file in the File Explorer instance, and goes along with the installer, choosing 'Custom' and setting the destination directory at 'D:\libreOffice'.

Hypothesizer 7
Then, the program directory of LibreOffice ('D:\libreOffice\program' in this case) will be added to the operating system commands paths. We can do so with Control Panel like this.

Stage Direction
Hypothesizer 7 clicks the Start button, 'Windows System', and 'Control Panel'; in the Control Panel instance, he clicks 'System and Security', 'System', 'Change settings' in 'Computer name, domain, and workgroup settings', the 'Advanced' tab, 'Environment Variables...', 'Edit...' for 'Path' for 'User variables for %USERNAME%', and 'New'; he enters 'D:\libreOffice\program'; he clicks 'OK'.

Hypothesizer 7
We leave this window as it is because we use it afterwards.

What would have to be referred to by your IDE are these.

For Java programming, as Jar files, the 'unoil.jar', 'jurt.jar', 'ridl.jar', and 'juh.jar' files in the 'program\classes' directory in the product directory.

For Python programming, as modules paths, the 'program' directory in the product directory.


3-3: Installing and Configuring Apache OpenOffice


Hypothesizer 7
We will install Apache OpenOffice. If you are going to use LibreOffice, this will be unnecessary.

We download an install package file of the main body and an install package file of a language pack from the Apache OpenOffice download Web page into somewhere, and install the packages.

Stage Direction
Hypothesizer 7 downloads the Windows x86 install package files, double-clicks the main body package file in the File Explorer instance, goes along with the installer, setting the destination directory at 'D:\apacheOpenOffice' and choosing 'Custum' and setting the destination directory at 'D:\apacheOpenOffice', double-clicks the language pack package file in the File Explorer instance, and goes along with the installer.

Hypothesizer 7
Then, the program directory of Apache OpenOffice ('D:\apacheOpenOffice\program' in this case) will be added to the operating system commands paths. We can do so with Control Panel like this.

Stage Direction
Hypothesizer 7 clicks the Start button, 'Windows System', and 'Control Panel'; in the Control Panel instance, he clicks 'System and Security', 'System', 'Change settings' in 'Computer name, domain, and workgroup settings', the 'Advanced' tab, 'Environment Variables...', 'Edit...' for 'Path' for 'User variables for %USERNAME%', and 'New'; he enters 'D:\apacheOpenOffice\program'; he clicks 'OK'.

Hypothesizer 7
We leave this window as it is because we use it afterwards.

What would have to be referred to by your IDE are these.

For Java programming, as Jar files, the 'unoil.jar', 'jurt.jar', 'ridl.jar', and 'juh.jar' files in the 'program\classes' directory in the product directory.

For Python programming, as modules paths, the 'program' directory in the product directory.


3-4: Installing LibreOffice SDK


Hypothesizer 7
We will install LibreOffice SDK. If you are going to use Apache OpenOffice or are not going to develop any UNO datum type or any C++ code piece, this will be unnecessary.

We download an install package file from the LibreOffice download Web page into somewhere, and install the package. Be aware that the SDK will be installed into the 'sdk' sub directory under the directory we specify in the installer.

Stage Direction
Hypothesizer 7 downloads the Windows x64 install package file, double-clicks the package file in the File Explorer instance, and goes along with the installer, setting the destination directory at 'D:\libreOffice'.

Hypothesizer 7
What would have to be referred to by your IDE are these.

For C++ programming, as header files paths, the 'sdk\include' directory in the product directory; as libraries paths, the 'sdk\lib' directory; as library names, 'icppuhelper.lib', 'icppu.lib', 'ipurpenvhelper.lib', 'isalhelper.lib', and 'isal.lib'.


3-5: Installing Apache OpenOffice SDK


Hypothesizer 7
We will install Apache OpenOffice SDK. If you are going to use LibreOffice or are not going to develop any UNO datum type or any C++ code piece, this will be unnecessary.

We download an install package file from the Apache OpenOffice download Web page into somewhere, and install the package. Be aware that the SDK will be installed into the 'sdk' sub directory under the directory we specify in the installer.

Stage Direction
Hypothesizer 7 downloads the Windows x86 install package file, double-clicks the package file in the File Explorer instance, and goes along with the installer, setting the destination directory at 'D:\apacheOpenOffice'.

Hypothesizer 7
What would have to be referred to by your IDE are these.

For C++ programming, as header files paths, the 'sdk\include' directory in the product directory; as libraries paths, the 'sdk\lib' directory; as library names, 'icppuhelper.lib', 'icppu.lib', 'ipurpenvhelper.lib', 'isalhelper.lib', and 'isal.lib'.


3-6: Installing and Configuring OpenJDK + OpenJFX


Hypothesizer 7
We will install OpenJDK.

We download an archive file from the OpenJDK download Web page into somewhere, and copy the necessary contents of the archive file into somewhere.

Stage Direction
Hypothesizer 7 downloads the Windows/x64 ZIP file, creates the directory, 'E:\home\%USERNAME%\myApplications\execution\openJdk', double-clicks the ZIP file in the File Explorer instance, copy the contents under the root version directory of the ZIP file into the created directory.

Hypothesizer 7
Then, a necessary environment variable will be set, and the JDK binary directory will be added to the operating system commands paths. We can do so with Control Panel like this.

Stage Direction
In the 'Environment Variables' window that has been opened in the 'Installing LibreOffice' sub section or the 'Installing Apache OpenOffice' sub section, Hypothesizer 7 clicks 'New...' for 'User variables for %USERNAME%'; he enters 'JAVA_HOME' and 'E:\home\%USERNAME%\myApplications\execution\openJdk' for 'Variable name' and 'Variable value' respectively; he clicks 'OK'; he clicks 'Edit...' for 'Path' for 'User variables for %USERNAME%' and 'New'; he enters '%JAVA_HOME%\bin'; he clicks 'OK'.

Hypothesizer 7
We leave this window as it is because we use it afterwards.

We will install OpenJFX.

We download an archive file from the OpenJFX download Web page into somewhere, and copy the necessary contents of the archive file into somewhere.

Stage Direction
Hypothesizer 7 downloads the JavaFX Windows x64 SDK 15.0.1 ZIP file, creates the directory, 'E:\home\%USERNAME%\myApplications\libraries/javaFx', double-clicks the ZIP file in the File Explorer instance, copy the contents under the root version directory of the ZIP file into the created directory.

Hypothesizer 7
What would have to be referred to by your IDE are these.

For Java programming, as module paths, the 'lib' directory in the OpenJFX product directory; as module names, 'javafx.controls,javafx.fxml'.


3-7: Installing and Configuring Gradle


Hypothesizer 7
We will install Gradle.

We download an archive file from the Gradle download Web page into somewhere, and copy the necessary contents of the archive file into somewhere.

Stage Direction
Hypothesizer 7 downloads the ZIP file, creates the directory, 'E:\home\%USERNAME%\myApplications\execution\gradle', double-clicks the ZIP file in the File Explorer instance, copy the contents under the root version directory of the ZIP file into the created directory.

Hypothesizer 7
Then, a necessary environment variable will be set, and the Gradle binary directory will be added to the operating system commands paths. We can do so with Control Panel like this.

Stage Direction
In the 'Environment Variables' window that has been opened in the 'Installing LibreOffice' sub section or the 'Installing Apache OpenOffice' sub section, Hypothesizer 7 clicks 'New...' for 'User variables for %USERNAME%'; he enters 'GRADLE_HOME' and 'E:\home\%USERNAME%\myApplications\execution\gradle' for 'Variable name' and 'Variable value' respectively; he clicks 'OK'; he clicks 'Edit...' for 'Path' in 'User variables for %USERNAME%' and 'New'; he enters '%GRADLE_HOME%\bin'; he clicks 'OK'.

Hypothesizer 7
We leave this window as it is because we use it afterwards.


3-8: Installing and Configuring Visual Studio C++ and Installing Necessary Header Files and Libraries, wxWidgets, and OpenSSL


Hypothesizer 7
We will install Visual Studio C++. If you are not going to develop any C++ code piece, this will be unnecessary.

We download an install package file from the Visual Studio Download download Web page into somewhere, and install the package.

What we need is only 'MSVC v142 - VS 2019 C++ x64/x86 build tools (v14.28)'.

Stage Direction
Hypothesizer 7 downloads an install package file of the Community edition, double-clicks the package file in the File Explorer instance, and goes along with the installer, setting the Visual Studio IDE path at 'D:\visualStudio\ide', setting 'Download cache' at 'D:\visualStudio\downloadCache', unchecking 'Keep download cache after the installation', setting 'Shared components, tools, and SDKs' at 'D:\visualStudio\shared', and choosing 'MSVC v142 - VS 2019 C++ x64/x86 build tools (v14.28)' in the 'Individual components' tab.

Hypothesizer 7
Then, the C++ compiler and linker directory will be added to the operating system commands paths. We can do so with Control Panel like this.

Stage Direction
In the 'Environment Variables' window that has been opened in the 'Installing LibreOffice' sub section or the 'Installing Apache OpenOffice' sub section, Hypothesizer 7 clicks 'Edit...' for 'Path' in 'User variables for %USERNAME%' and 'New'; he enters 'D:\visualStudio\ide\VC\Tools\MSVC\14.28.29333\bin\Hostx64\x64'; he clicks 'OK'.

Hypothesizer 7
In fact, we have to install additional header files and libraries from Windows 10 SDK. We download the install package file from the Windows 10 SDK download Web page into somewhere, and install the package.

Stage Direction
Hypothesizer 7 downloads the install package file, double-clicks the package file in the File Explorer instance, and goes along with the installer, setting the destination directory at 'D:\windowsSdk' and choosing 'Windows SDK for UWP C++ Apps' ('Windows SDK for UWP Managed Apps' and 'Windows SDK Signing Tools for Desktop Apps' are inevitably chosen) and 'Windows SDK for Desktop C++ amd64 Apps' ('Windows SDK for Desktop C++ x86 Apps' is inevitably chosen).

Hypothesizer 7
Then, the Windows SDK execution directory will be added to the operating system commands paths. We can do so with Control Panel like this.

Stage Direction
In the 'Environment Variables' window that has been opened in the 'Installing LibreOffice' sub section or the 'Installing Apache OpenOffice' sub section, Hypothesizer 7 clicks 'Edit...' for 'Path' in 'User variables for %USERNAME%' and 'New'; he enters 'D:\windowsSdk\bin\10.0.19041.0\x64'; he clicks 'OK'.

Hypothesizer 7
We will install wxWidgets. If you are not going to use wxWidgets (our sample programs will use it), this will be unnecessary.

We download an archive file that contains the source files from the wxWidgets download Web page into somewhere, copy the necessary contents of the archive file into somewhere, open 'x64 Native Tools Command Prompt for VS 2019', and execute these commands in the terminal (please change the directory paths and platform based parameters as necessary).

Stage Direction
Hypothesizer 7 downloads the "Windows ZIP" ZIP file, creates the directory, 'E:\home\%USERNAME%\myApplications\libraries\wxWidgets', double-clicks the ZIP file in the File Explorer instance, copy the contents under the root version directory of the ZIP file into the created directory; clicks the 'Start' button, clicks 'Visual Studio 2019' -> 'x64 Native Tools Command Prompt for VS 2019', and executes these commands in the opened terminal.

@cmd Source Code
E:
cd \home\%USERNAME%\myApplications\libraries\wxWidgets\build\msw
nmake /f makefile.vc BUILD=release SHARED=1 TARGET_CPU=X64

Hypothesizer 7
We will install OpenSSL. If you are not going to use OpenSSL (our sample programs will use it), this will be unnecessary. OpenSSL is used for using some hashing algorithms for hashing passwords.

We download an installer of a pre-built non-light version from an OpenSSL download Web page into somewhere, and executes the installer.

Stage Direction
Hypothesizer 7 downloads an installer of 'Win64 OpenSSL v1.1.1h', double-clicks the installer in the File Explorer instance, and goes along with the installer, setting the destination path at 'D:\openSsl' and choosing 'The OpenSSL binary directory' in the 'Copy OpenSSL DLLs to:' option.

Hypothesizer 7
What would have to be referred to by your IDE are these.

For C++ programming, as header files paths, the 'include\msvc' and 'include' directories in the wxWidgets product directory and the 'include' directory in the OpenSSL product directory; as libraries paths, the 'lib\vc_x64_dll' directory in the wxWidgets product directory and the 'lib' directory in the OpenSSL product directory; as library names, 'user32.lib', 'gdi32.lib', 'Dbghelp.lib', 'libcrypto.lib'.


3-9: Installing .NET Framework SDK


Hypothesizer 7
We will install .NET Framework SDK. If you are not going to develop any .NET Framework code piece, this will be unnecessary.

In fact, .NET Framework SDK is included in .NET Framework Developer Pack. We download the install package file from the .NET download Web page into somewhere, and install the package.

Stage Direction
Hypothesizer 7 double-clicks the package file that has been downloaded from the .NET download Web page, in the File Explorer instance, and goes along with the installer.


3-10: Installing and Configuring Python + mypy + wxPython


Hypothesizer 7
We will install Python and pip. If you are not going to develop any Python code piece, this will be unnecessary.

We have to install the Python version that corresponds to the LibreOffice or Apache OpenOffice version. . . . In order to know the Python version, we can look into the '%the LibreOffice or Apache OpenOffice base directory%\program\pythonloader.uno.ini' file. . . . Actually, Python is included in the '%the LibreOffice or Apache OpenOffice base directory%\program' directory.

However, as the Python included in LibreOffice or in Apache OpenOffice is a some-ingredients-are-stripped-off version, we will hack to use an external Python of the same version, instead.

Objector 6A
. . . In the first place, why can't I use an arbitrary newer version instead?

Hypothesizer 7
That is because the 'pyuno.pyd' dynamic link library included in LibreOffice or Apache OpenOffice is exclusively for the specified Python version.

Objector 6A
That is a rather irritating point about Python, actually: the meagerness of binary compatibility, unlike Java. . . . You know, also 'pyc' files are incompatible between some only slightly different Python versions. I cannot help but suspect that Python is maliciously performing some gratuitous version checking.

Hypothesizer 7
Ah . . ., anyway, let me give up about Apache OpenOffice Python, because I have no intention to use Python 2.

Objector 6A
. . . I don't mind, personally, but someone might.

Hypothesizer 7
I know, but as Python 2 is scheduled to be ceased to be supported soon, I hope that Apache OpenOffice will adopt Python 3 sooner or much sooner.

Objector 6A
. . .

Hypothesizer 7
Anyway, we will install an external Python for LibreOffice, like this (please change the directory paths as necessary).

Stage Direction
Hypothesizer 7 downloads the "Windows x86-64 executable installer" file from the Python download page into '~/myData/downloadedFiles', double-clicks the installer in the File Explorer instance, and goes along with the installer, declining "Install launcher for all users", choosing "Customize installation", choosing only "pip" in the "Option features" dialog window, choosing nothing in the "Advanced Options" dialog window, and setting the install location at 'D:\python'.

Hypothesizer 7
Then, the Python directory and its 'Scripts' directory will be added to the operating system commands paths in precedence over the LibreOffice program directory. We can do so with Control Panel, like this.

Stage Direction
In the 'Environment Variables' window that has been opened in the 'Installing LibreOffice' sub section or the 'Installing Apache OpenOffice' sub section, Hypothesizer 7 clicks 'Edit...' for 'Path' in 'User variables for %USERNAME%' and 'New'; he enters 'D:\python'; he moves 'D:\python' above the LibreOffice or Apache OpenOffice program directory by clicking 'Move Up' the required times; he clicks 'New'; he enters 'D:\python\Scripts'; he moves 'D:\python\Scripts' above the LibreOffice or Apache OpenOffice program directory by clicking 'Move Up' the required times; he clicks 'OK'.

Hypothesizer 7
Then, we will make LibreOffice use the external Python according to this article.

Stage Direction
Hypothesizer 7 makes LibreOffice use the external Python.

Hypothesizer 7
Let us make sure that 'python' command hereafter points to the appropriate Python command (that is important because otherwise, the things installed hereafter would go to another Python).

We will install mypy.

We execute this command in a terminal.

Stage Direction
Hypothesizer 7 executes these commands in the terminal.

@bash Source Code
python -m pip install -U typed_ast
python -m pip install -U mypy
python -m pip install python-dateutil
python -m pip install types-python-dateutil

Hypothesizer 7
We will install wxPython. If you are not going to use wxPython (our sample programs will use it), this will be unnecessary.

We execute this command in a terminal.

Stage Direction
Hypothesizer 7 executes this command in the terminal.

@cmd Source Code
python -m pip install pathlib2
python -m pip install -U wxPython


3-11: Setting the JRE Used by LibreOffice or Apache OpenOffice


Hypothesizer 7
We will set the JRE used for the JVM inside the LibreOffice or Apache OpenOffice process. If you do not develop any Java code piece that is going to live in such a JVM, this will be unnecessary.

For LibreOffice or for Apache OpenOffice, we can set it like this: start up an office process; click 'Tools' on the menu; click 'Options'; click 'Advanced'; check 'Use a Java runtime environment'; select the JRE; click 'OK'.


3-12: Creating Some C++ Header Files from Some UNO Datum Types Merged Files That Are Included in LibreOffice or Apache OpenOffice


Hypothesizer 7
We will create some C++ header files from some UNO datum types merged files that are included in LibreOffice or Apache OpenOffice. If you do not develop any C++ code piece, this will be unnecessary.

We execute this command in a terminal (please change the directory paths as necessary, where 'D:\libreOffice' is the base directory of LibreOffice and 'E:/home/%USERNAME%/myApplications/headerFiles' is the directory that should be the base for those C++ header files).

Stage Direction
Hypothesizer 7 executes this command in the terminal.

@cmd Source Code
D:
cd \libreOffice
sdk\bin\cppumaker -Gc -OE:/home/%USERNAME%/myApplications/headerFiles ./program/types.rdb ./program/types/offapi.rdb

Hypothesizer 7
What would have to be referred to by your IDE are these.

For C++ programming, as header file paths, the directory created above.


References


  • The Document Foundation. (n/a). Download LibreOffice | LibreOffice. Retrieved from https://www.libreoffice.org/download/download/
  • The Apache Software Foundation. (2019). Apache OpenOffice - Downloads. Retrieved from https://openoffice.apache.org/downloads.html
  • Oracle Corporation and/or its affiliates. (2020). JDK 15 GA Release. Retrieved from https://jdk.java.net/15/
  • Gluon. (2020). JavaFX. Retrieved from https://gluonhq.com/products/javafx/
  • Gradle Inc. (2020). Gradle | Releases. Retrieved from https://gradle.org/releases/
  • Microsoft. (n/a). Windows 10 SDK. Retrieved from https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk
  • Microsoft. (n/a). Visual Studio IDE, Code Editor, VSTS, & App Center. Retrieved from https://visualstudio.microsoft.com/
  • Microsoft. (2020). Download .NET (Linux, macOS, and Windows). Retrieved from https://dotnet.microsoft.com/download
  • wxWidgets. (2020). Downloads - wxWidgets. Retrieved from https://www.wxwidgets.org/downloads/
  • Shining Light Productions. (N/A). Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions. Retrieved from https://slproweb.com/products/Win32OpenSSL.html
<The previous article in this series | The table of contents of this series | The next article in this series>