LoginSignup
1
2

More than 3 years have passed since last update.

VSCode+GradleでJavaFXのHelloWorldを動かすまで

Last updated at Posted at 2020-02-16

はじめに

VSCode+GradleでJavaFXを「とりあえず」動かすにはどうしたらいいのかメモ的に書きます。
随所に先人の知恵をコピペしてできましたものです。先人の皆さま、いつもありがとうございます。

0. 環境

利用したツールと実行環境は以下のとおりです。

  • Linux Mint 19.3
  • OpenJDK 11
  • OpenJFX 11 (11.0.6)
  • VSCode(code) 1.42.1
  • Gradle 6.1.1

また、タイトルの部分にフォーカスするため、個々のツールのインストールについては割愛します。

1. Gradleでプロジェクトを作成する

プロジェクトディレクトリを作成し、gradle initを実行します(gradleコマンドにパスを通している前提です)。以下のように選択肢に答えていくと出来あがります。

ximia@thinkpad:~/dev/sandbox02$ gradle init

Select type of project to generate:
  1: basic
  2: application
  3: library
  4: Gradle plugin
Enter selection (default: basic) [1..4] 2

Select implementation language:
  1: C++
  2: Groovy
  3: Java
  4: Kotlin
  5: Swift
Enter selection (default: Java) [1..5] 3

Select build script DSL:
  1: Groovy
  2: Kotlin
Enter selection (default: Groovy) [1..2] 1

Select test framework:
  1: JUnit 4 VSCode
  2: TestNG
  3: Spock
  4: JUnit Jupiter
Enter selection (default: JUnit 4) [1..4] 1

Project name (default: sandbox02): 
Source package (default: sandbox02): me.osa2.java.sandbox02

> Task :init
Get more help with your project: https://docs.gradle.org/6.1.1/userguide/tutorial_java_projects.html

BUILD SUCCESSFUL in 42s
2 actionable tasks: 2 executed
ximia@thinkpad:~/dev/sandbox02$ 

2.VSCodeでtasks.jsonを追加する

上で作ったsandbox02ディレクトリをVSCodeのワークスペースにフォルダ追加してから、デフォルトのビルドを実行とします。
が、何を実行したらいいのか分からないVSCodeがConfigを作れと行ってきます(下の図)。画面中央上に表示されている「Configure Build Task...」をクリックします(VSCodeを日本語化とかしている人は、適宜脳内通訳してください)。

Screenshot at 2020-02-16 18-51-30.png

選択肢ではその他を選びます。するとHelloと表示するだけのtasks.jsonがプロジェクトの.vscodeフォルダ下に出来あがります。そこに以下をまるっと全体上書きでコピペします。

{
    "version": "1.0.0",
    "tasks": [
        {
            "label": "build",
            "type": "shell",
            "command": "./gradlew build"
        },
        {
            "label": "run",
            "type": "shell",
            "command": "./gradlew run",
            "group": {
                "kind": "build",
                "isDefault": true
            }
        },
        {
            "label": "clean",
            "type": "shell",
            "command": "./gradlew clean"
        },
        {
            "label": "check",
            "type": "shell",
            "command": "./gradlew check"
        },
        {
            "label": "create-jar",
            "type": "shell",
            "command": "./gradlew jar"
        }
    ]
}

保存後に、VSCodeのメニューから Terminal > Run Buld Task... を選択すると下のシェルの画面でごそごそとビルドが走り、Gradleがinit時に用意したコンソールアプリでの"Hello World"が表示されます。
tasks.jsonをみると、gradle runがbuildタスクのデフォルトとなっていることがわかります。

3. JavaFXのコードに差し替える

非常に雑ですが、VSCode内でsrc/main/java/(パッケージパス)/App.javaを以下のコードでまるっと上書きし、ファイル名をHelloWorld.javaに変更します。また、src/test以下にあるテスト用のスケルトンもエラーとなるので(ここではテストコードは書かないということで)、削除します。

package your.package.path;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class HelloWorld extends Application {
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Hello World!");
        Button btn = new Button();
        btn.setText("Say 'Hello World'");
        btn.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event) {
                System.out.println("Hello World!");
            }
        });

        StackPane root = new StackPane();
        root.getChildren().add(btn);
        primaryStage.setScene(new Scene(root, 300, 250));
        primaryStage.show();
    }
}

なお、このコードは天下のOracleさまの以下のページからまるっと拝借してまいりました。
https://docs.oracle.com/javafx/2/get_started/hello_world.htm

4. VSCode, Gradleそれぞれにクラスパスを通す

まず、build.gradleを以下のようにまるっと置き換え、保存します。mainClassNameは皆さまそれぞれのご都合に合わせて書き換えください。ここまででビルド(gradle run)をすると、JavaFXのアプリが起動されます。アプリのイメージは末尾にあります。

/*
 * This file was generated by the Gradle 'init' task.
 *
 * This generated file contains a sample Java project to get you started.
 * For more details take a look at the Java Quickstart chapter in the Gradle
 * User Manual available at https://docs.gradle.org/6.1.1/userguide/tutorial_java_projects.html
 */

plugins {
    id 'java'
    id 'application'
    id 'eclipse' // for auto-completion enabled .classpath.
    id 'org.openjfx.javafxplugin' version '0.0.8'
}

repositories {
    jcenter()
}

javafx {
    version = "11"
    modules = [ 'javafx.controls']
}

dependencies {
    // This dependency is used by the application.
    implementation 'com.google.guava:guava:28.1-jre'

    // Use JUnit test framework
    testImplementation 'junit:junit:4.12'

    // Making Runnable Jar
    implementation "com.github.jengelman.gradle.plugins:shadow:5.1.0"
}

mainClassName = 'me.osa2.java.sandbox02.HelloWorld'

tasks.withType(JavaCompile) {
    options.encoding = "UTF-8"
}

jar {
        manifest {
        attributes ('Main-Class': mainClassName, "Implementation-Title": "Gradle",
                "Implementation-Version": 1)
    }
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    from configurations.compileClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}

次に.vscodeフォルダ(先ほどtasks.jsonを作ったフォルダ)にlaunch.jsonをファイル作成し、以下を中身として、まるっと貼り付けます。メインクラス名、パッケージ名、openjfxのlibのパスは皆さまそれぞれのご都合に合わせて書き換えください。これでVSCodeを起動し直すとソース上で認識不能だった識別子の赤波アンダーラインが消えるはずです。

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "java",
            "name": "Debug (Launch) - Current File",
            "request": "launch",
            "mainClass": "${file}"
        },
        {
            "type": "java",
            "name": "Debug (Launch)-HelloWorld<sandbox02>",
            "request": "launch",
            "mainClass": "me.osa2.java.sandbox02.HelloWOrld",
            "projectName": "hello",
            "vmArgs": "--module-path /home/ximia/libs/javafx-sdk-11.0.2/lib --add-modules javafx.controls,javafx.fxml"
        }
    ]
}

5. おわりに

Qiitaの他の記事の寄せ集め的で、しかも「まるっとコピペ」ばかりでスミマセン。
app.png
動いてから諸々考えたい人にはよろしいかと。ご参考に慣れば幸いです!:grinning:

== END ==

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2