├── ServiceSample ├── src │ ├── com.greetings │ │ └── classes │ │ │ ├── module-info.java │ │ │ └── com │ │ │ └── greetings │ │ │ └── Main.java │ ├── com.socket │ │ └── classes │ │ │ ├── module-info.java │ │ │ └── com │ │ │ └── socket │ │ │ ├── spi │ │ │ └── NetworkSocketProvider.java │ │ │ └── NetworkSocket.java │ └── org.fastsocket │ │ └── classes │ │ ├── module-info.java │ │ └── org │ │ └── fastsocket │ │ ├── FastNetworkSocket.java │ │ └── FastNetworkSocketProvider.java ├── nbproject │ ├── genfiles.properties │ ├── project.xml │ └── project.properties └── build.xml ├── images ├── jigsaw-maven.png ├── openjfx-jdk12.png ├── servicesample.png └── anagramgamesample.png ├── AnagramGame ├── src │ ├── com.toy.anagrams │ │ └── classes │ │ │ ├── module-info.java │ │ │ └── com │ │ │ └── toy │ │ │ └── anagrams │ │ │ └── ui │ │ │ ├── About.java │ │ │ ├── About.form │ │ │ ├── Anagrams.form │ │ │ └── Anagrams.java │ ├── com.wordlibrary │ │ └── classes │ │ │ ├── module-info.java │ │ │ └── com │ │ │ └── wordlibrary │ │ │ ├── spi │ │ │ └── WordLibraryProvider.java │ │ │ ├── WordLibrary.java │ │ │ └── utils │ │ │ ├── ByteUtilities.java │ │ │ ├── ArrayUtilities.java │ │ │ └── DateUtilities.java │ ├── org.wordlibrary.animal │ │ └── classes │ │ │ ├── module-info.java │ │ │ └── org │ │ │ └── wordlibrary │ │ │ └── animal │ │ │ ├── AnimalWordLibraryProvider.java │ │ │ └── AnimalWordLibrary.java │ ├── org.wordlibrary.names │ │ └── classes │ │ │ ├── module-info.java │ │ │ └── org │ │ │ └── wordlibrary │ │ │ └── names │ │ │ ├── NameWordLibraryProvider.java │ │ │ └── NameWordLibrary.java │ └── org.wordlibrary.technical │ │ └── classes │ │ ├── module-info.java │ │ └── org │ │ └── wordlibrary │ │ └── technical │ │ ├── TechnicalWordLibraryProvider.java │ │ └── TechnicalWordLibrary.java ├── nbproject │ ├── genfiles.properties │ ├── project.xml │ └── project.properties └── build.xml ├── AnagramGameMaven ├── com.toy.anagram │ ├── src │ │ └── main │ │ │ └── java │ │ │ ├── module-info.java │ │ │ └── com │ │ │ └── toy │ │ │ └── anagram │ │ │ └── ui │ │ │ ├── About.java │ │ │ ├── About.form │ │ │ ├── Anagrams.form │ │ │ └── Anagrams.java │ ├── nbactions.xml │ └── pom.xml ├── com.wordlibrary │ ├── src │ │ └── main │ │ │ └── java │ │ │ ├── module-info.java │ │ │ └── com │ │ │ └── wordlibrary │ │ │ ├── spi │ │ │ └── WordLibraryProvider.java │ │ │ ├── WordLibrary.java │ │ │ └── utils │ │ │ ├── ByteUtilities.java │ │ │ ├── ArrayUtilities.java │ │ │ └── DateUtilities.java │ └── pom.xml ├── org.wordlibrary.animal │ ├── src │ │ └── main │ │ │ └── java │ │ │ ├── module-info.java │ │ │ └── org │ │ │ └── wordlibrary │ │ │ └── animal │ │ │ ├── AnimalWordLibraryProvider.java │ │ │ └── AnimalWordLibrary.java │ └── pom.xml ├── org.wordlibrary.names │ ├── src │ │ └── main │ │ │ └── java │ │ │ ├── module-info.java │ │ │ └── org │ │ │ └── wordlibrary │ │ │ └── names │ │ │ ├── NameWordLibraryProvider.java │ │ │ └── NameWordLibrary.java │ └── pom.xml └── README.md ├── JavaFX ├── HelloFX │ ├── src │ │ └── main │ │ │ ├── java │ │ │ ├── module-info.java │ │ │ └── org │ │ │ │ └── wordlibrary │ │ │ │ └── hellofx │ │ │ │ ├── SecondaryController.java │ │ │ │ ├── PrimaryController.java │ │ │ │ └── App.java │ │ │ └── resources │ │ │ └── org │ │ │ └── wordlibrary │ │ │ └── hellofx │ │ │ ├── primary.fxml │ │ │ └── secondary.fxml │ ├── nbactions.xml │ ├── nb-configuration.xml │ └── pom.xml └── README.md ├── .gitignore ├── .github └── workflows │ └── main.yml └── README.md /ServiceSample/src/com.greetings/classes/module-info.java: -------------------------------------------------------------------------------- 1 | module com.greetings { 2 | requires com.socket; 3 | } 4 | -------------------------------------------------------------------------------- /images/jigsaw-maven.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeertjanWielenga/JigsawJavaModularProjectSamples/HEAD/images/jigsaw-maven.png -------------------------------------------------------------------------------- /images/openjfx-jdk12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeertjanWielenga/JigsawJavaModularProjectSamples/HEAD/images/openjfx-jdk12.png -------------------------------------------------------------------------------- /images/servicesample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeertjanWielenga/JigsawJavaModularProjectSamples/HEAD/images/servicesample.png -------------------------------------------------------------------------------- /images/anagramgamesample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeertjanWielenga/JigsawJavaModularProjectSamples/HEAD/images/anagramgamesample.png -------------------------------------------------------------------------------- /ServiceSample/src/com.socket/classes/module-info.java: -------------------------------------------------------------------------------- 1 | module com.socket { 2 | exports com.socket; 3 | exports com.socket.spi; 4 | uses com.socket.spi.NetworkSocketProvider; 5 | } 6 | -------------------------------------------------------------------------------- /AnagramGame/src/com.toy.anagrams/classes/module-info.java: -------------------------------------------------------------------------------- 1 | module com.toy.anagrams { 2 | requires java.base; 3 | requires java.desktop; 4 | requires java.logging; 5 | requires com.wordlibrary; 6 | } 7 | -------------------------------------------------------------------------------- /AnagramGame/src/com.wordlibrary/classes/module-info.java: -------------------------------------------------------------------------------- 1 | module com.wordlibrary { 2 | exports com.wordlibrary; 3 | exports com.wordlibrary.spi; 4 | uses com.wordlibrary.spi.WordLibraryProvider; 5 | } 6 | -------------------------------------------------------------------------------- /AnagramGameMaven/com.toy.anagram/src/main/java/module-info.java: -------------------------------------------------------------------------------- 1 | module com.toy.anagram { 2 | requires java.base; 3 | requires java.desktop; 4 | requires java.logging; 5 | requires com.wordlibrary; 6 | } 7 | -------------------------------------------------------------------------------- /AnagramGameMaven/com.wordlibrary/src/main/java/module-info.java: -------------------------------------------------------------------------------- 1 | module com.wordlibrary { 2 | exports com.wordlibrary; 3 | exports com.wordlibrary.spi; 4 | uses com.wordlibrary.spi.WordLibraryProvider; 5 | } 6 | -------------------------------------------------------------------------------- /ServiceSample/src/org.fastsocket/classes/module-info.java: -------------------------------------------------------------------------------- 1 | module org.fastsocket { 2 | requires com.socket; 3 | provides com.socket.spi.NetworkSocketProvider with org.fastsocket.FastNetworkSocketProvider; 4 | } 5 | -------------------------------------------------------------------------------- /JavaFX/HelloFX/src/main/java/module-info.java: -------------------------------------------------------------------------------- 1 | module org.wordlibrary.hellofx { 2 | requires javafx.controls; 3 | requires javafx.fxml; 4 | 5 | opens org.wordlibrary.hellofx to javafx.fxml; 6 | exports org.wordlibrary.hellofx; 7 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /AnagramGame/nbproject/private/ 2 | /AnagramGameMaven/org.wordlibrary.animal/target/ 3 | /AnagramGameMaven/com.wordlibrary/target/ 4 | /AnagramGameMaven/com.toy.anagram/target/ 5 | /AnagramGameMaven/org.wordlibrary.names/target/ 6 | /JavaFX/HelloFX/target/ -------------------------------------------------------------------------------- /AnagramGame/src/org.wordlibrary.animal/classes/module-info.java: -------------------------------------------------------------------------------- 1 | module org.wordlibrary.animal { 2 | requires com.wordlibrary; 3 | provides com.wordlibrary.spi.WordLibraryProvider 4 | with org.wordlibrary.animal.AnimalWordLibraryProvider; 5 | } 6 | -------------------------------------------------------------------------------- /AnagramGame/src/org.wordlibrary.names/classes/module-info.java: -------------------------------------------------------------------------------- 1 | 2 | module org.wordlibrary.names { 3 | requires com.wordlibrary; 4 | provides com.wordlibrary.spi.WordLibraryProvider 5 | with org.wordlibrary.names.NameWordLibraryProvider; 6 | } 7 | -------------------------------------------------------------------------------- /AnagramGameMaven/org.wordlibrary.animal/src/main/java/module-info.java: -------------------------------------------------------------------------------- 1 | module org.wordlibrary.animal { 2 | requires com.wordlibrary; 3 | provides com.wordlibrary.spi.WordLibraryProvider 4 | with org.wordlibrary.animal.AnimalWordLibraryProvider; 5 | } 6 | -------------------------------------------------------------------------------- /AnagramGameMaven/org.wordlibrary.names/src/main/java/module-info.java: -------------------------------------------------------------------------------- 1 | 2 | module org.wordlibrary.names { 3 | requires com.wordlibrary; 4 | provides com.wordlibrary.spi.WordLibraryProvider 5 | with org.wordlibrary.names.NameWordLibraryProvider; 6 | } 7 | -------------------------------------------------------------------------------- /AnagramGame/src/org.wordlibrary.technical/classes/module-info.java: -------------------------------------------------------------------------------- 1 | module org.wordlibrary.technical { 2 | requires com.wordlibrary; 3 | provides com.wordlibrary.spi.WordLibraryProvider 4 | with org.wordlibrary.technical.TechnicalWordLibraryProvider; 5 | } 6 | -------------------------------------------------------------------------------- /JavaFX/README.md: -------------------------------------------------------------------------------- 1 | # JavaFX 2 | 3 | A repository of small JavaFX samples. 4 | 5 | * [HelloFX](https://github.com/GeertjanWielenga/JigsawJavaModularProjectSamples/tree/master/JavaFX/HelloFX) is the result of following https://openjfx.io/openjfx-docs/#IDE-NetBeans: 6 | 7 | 8 | -------------------------------------------------------------------------------- /ServiceSample/src/org.fastsocket/classes/org/fastsocket/FastNetworkSocket.java: -------------------------------------------------------------------------------- 1 | package org.fastsocket; 2 | 3 | import com.socket.NetworkSocket; 4 | 5 | class FastNetworkSocket extends NetworkSocket { 6 | 7 | FastNetworkSocket() { 8 | } 9 | 10 | @Override 11 | public void close() { 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /ServiceSample/src/com.greetings/classes/com/greetings/Main.java: -------------------------------------------------------------------------------- 1 | package com.greetings; 2 | 3 | import com.socket.NetworkSocket; 4 | 5 | public class Main { 6 | 7 | public static void main(String[] args) { 8 | NetworkSocket s = NetworkSocket.open(); 9 | System.out.println(s.getClass()); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /ServiceSample/src/com.socket/classes/com/socket/spi/NetworkSocketProvider.java: -------------------------------------------------------------------------------- 1 | package com.socket.spi; 2 | 3 | import com.socket.NetworkSocket; 4 | 5 | public abstract class NetworkSocketProvider { 6 | 7 | protected NetworkSocketProvider() { 8 | } 9 | 10 | public abstract NetworkSocket openNetworkSocket(); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /AnagramGame/src/com.wordlibrary/classes/com/wordlibrary/spi/WordLibraryProvider.java: -------------------------------------------------------------------------------- 1 | package com.wordlibrary.spi; 2 | 3 | import com.wordlibrary.WordLibrary; 4 | 5 | public abstract class WordLibraryProvider { 6 | 7 | protected WordLibraryProvider() { 8 | } 9 | 10 | public abstract WordLibrary openWordLibrary(); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /JavaFX/HelloFX/src/main/java/org/wordlibrary/hellofx/SecondaryController.java: -------------------------------------------------------------------------------- 1 | package org.wordlibrary.hellofx; 2 | 3 | import java.io.IOException; 4 | import javafx.fxml.FXML; 5 | 6 | public class SecondaryController { 7 | 8 | @FXML 9 | private void switchToPrimary() throws IOException { 10 | App.setRoot("primary"); 11 | } 12 | } -------------------------------------------------------------------------------- /AnagramGameMaven/com.wordlibrary/src/main/java/com/wordlibrary/spi/WordLibraryProvider.java: -------------------------------------------------------------------------------- 1 | package com.wordlibrary.spi; 2 | 3 | import com.wordlibrary.WordLibrary; 4 | 5 | public abstract class WordLibraryProvider { 6 | 7 | protected WordLibraryProvider() { 8 | } 9 | 10 | public abstract WordLibrary openWordLibrary(); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /JavaFX/HelloFX/src/main/java/org/wordlibrary/hellofx/PrimaryController.java: -------------------------------------------------------------------------------- 1 | package org.wordlibrary.hellofx; 2 | 3 | import java.io.IOException; 4 | import javafx.fxml.FXML; 5 | 6 | public class PrimaryController { 7 | 8 | @FXML 9 | private void switchToSecondary() throws IOException { 10 | App.setRoot("secondary"); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /JavaFX/HelloFX/nbactions.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | run 5 | 6 | jar 7 | 8 | 9 | clean 10 | javafx:run 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /ServiceSample/src/org.fastsocket/classes/org/fastsocket/FastNetworkSocketProvider.java: -------------------------------------------------------------------------------- 1 | package org.fastsocket; 2 | 3 | import com.socket.NetworkSocket; 4 | import com.socket.spi.NetworkSocketProvider; 5 | 6 | public class FastNetworkSocketProvider extends NetworkSocketProvider { 7 | 8 | public FastNetworkSocketProvider() { 9 | } 10 | 11 | @Override 12 | public NetworkSocket openNetworkSocket() { 13 | return new FastNetworkSocket(); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /AnagramGame/src/org.wordlibrary.names/classes/org/wordlibrary/names/NameWordLibraryProvider.java: -------------------------------------------------------------------------------- 1 | package org.wordlibrary.names; 2 | 3 | import com.wordlibrary.WordLibrary; 4 | import com.wordlibrary.spi.WordLibraryProvider; 5 | 6 | public class NameWordLibraryProvider extends WordLibraryProvider { 7 | 8 | public NameWordLibraryProvider() { 9 | } 10 | 11 | @Override 12 | public WordLibrary openWordLibrary() { 13 | return new NameWordLibrary(); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /AnagramGame/src/org.wordlibrary.animal/classes/org/wordlibrary/animal/AnimalWordLibraryProvider.java: -------------------------------------------------------------------------------- 1 | package org.wordlibrary.animal; 2 | 3 | import com.wordlibrary.WordLibrary; 4 | import com.wordlibrary.spi.WordLibraryProvider; 5 | 6 | public class AnimalWordLibraryProvider extends WordLibraryProvider { 7 | 8 | public AnimalWordLibraryProvider() { 9 | } 10 | 11 | @Override 12 | public WordLibrary openWordLibrary() { 13 | return new AnimalWordLibrary(); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /AnagramGameMaven/org.wordlibrary.names/src/main/java/org/wordlibrary/names/NameWordLibraryProvider.java: -------------------------------------------------------------------------------- 1 | package org.wordlibrary.names; 2 | 3 | import com.wordlibrary.WordLibrary; 4 | import com.wordlibrary.spi.WordLibraryProvider; 5 | 6 | public class NameWordLibraryProvider extends WordLibraryProvider { 7 | 8 | public NameWordLibraryProvider() { 9 | } 10 | 11 | @Override 12 | public WordLibrary openWordLibrary() { 13 | return new NameWordLibrary(); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /AnagramGame/nbproject/genfiles.properties: -------------------------------------------------------------------------------- 1 | build.xml.data.CRC32=95b4822c 2 | build.xml.script.CRC32=814d8318 3 | build.xml.stylesheet.CRC32=d04c8dac@1.3 4 | # This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. 5 | # Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. 6 | nbproject/build-impl.xml.data.CRC32=95b4822c 7 | nbproject/build-impl.xml.script.CRC32=96809415 8 | nbproject/build-impl.xml.stylesheet.CRC32=1c4ebdb7@1.3 9 | -------------------------------------------------------------------------------- /AnagramGameMaven/org.wordlibrary.animal/src/main/java/org/wordlibrary/animal/AnimalWordLibraryProvider.java: -------------------------------------------------------------------------------- 1 | package org.wordlibrary.animal; 2 | 3 | import com.wordlibrary.WordLibrary; 4 | import com.wordlibrary.spi.WordLibraryProvider; 5 | 6 | public class AnimalWordLibraryProvider extends WordLibraryProvider { 7 | 8 | public AnimalWordLibraryProvider() { 9 | } 10 | 11 | @Override 12 | public WordLibrary openWordLibrary() { 13 | return new AnimalWordLibrary(); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /ServiceSample/nbproject/genfiles.properties: -------------------------------------------------------------------------------- 1 | build.xml.data.CRC32=054a3f8f 2 | build.xml.script.CRC32=5450f178 3 | build.xml.stylesheet.CRC32=d04c8dac@1.1 4 | # This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. 5 | # Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. 6 | nbproject/build-impl.xml.data.CRC32=054a3f8f 7 | nbproject/build-impl.xml.script.CRC32=73639f52 8 | nbproject/build-impl.xml.stylesheet.CRC32=a7a9cb9b@1.1 9 | -------------------------------------------------------------------------------- /AnagramGame/src/org.wordlibrary.technical/classes/org/wordlibrary/technical/TechnicalWordLibraryProvider.java: -------------------------------------------------------------------------------- 1 | package org.wordlibrary.technical; 2 | 3 | import com.wordlibrary.WordLibrary; 4 | import com.wordlibrary.spi.WordLibraryProvider; 5 | 6 | public class TechnicalWordLibraryProvider extends WordLibraryProvider { 7 | 8 | public TechnicalWordLibraryProvider() { 9 | } 10 | 11 | @Override 12 | public WordLibrary openWordLibrary() { 13 | return new TechnicalWordLibrary(); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | on: 2 | push: 3 | branches: [ master ] 4 | pull_request: 5 | branches: [ master ] 6 | jobs: 7 | build: 8 | runs-on: ubuntu-latest 9 | strategy: 10 | matrix: 11 | java: [11, 11.0.12] 12 | steps: 13 | - uses: actions/checkout@v2 14 | - uses: actions/setup-java@v2 15 | with: 16 | distribution: 'zulu' 17 | java-version: ${{matrix.java}} 18 | - run: ant -buildfile AnagramGame/build.xml jar 19 | - run: ant -buildfile ServiceSample/build.xml jar 20 | -------------------------------------------------------------------------------- /AnagramGameMaven/README.md: -------------------------------------------------------------------------------- 1 | # Modular Maven Anagram Game 2 | 3 | A full example showing usage of --module-path in [nbactions.xml](https://github.com/GeertjanWielenga/JigsawJavaModularProjectSamples/blob/master/AnagramGameMaven/com.toy.anagram/nbactions.xml) of 'com.toy.anagram', consisting of three Jigsaw/Maven modules, i.e., 4 | with module-info.java and POM.xml in each of the three projects, setting dependencies between them. 5 | 6 | The result is a Java Swing 7 | Anagram Game (com.toy.anagram) that loads services of com.wordlibrary, for example, org.wordlibrary.animal. 8 | 9 | 10 | -------------------------------------------------------------------------------- /AnagramGame/nbproject/project.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | org.netbeans.modules.java.j2semodule 4 | 5 | 6 | AnagramGame 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /AnagramGameMaven/com.toy.anagram/nbactions.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | run 5 | 6 | jar 7 | 8 | 9 | process-classes 10 | org.codehaus.mojo:exec-maven-plugin:1.6.0:exec 11 | 12 | 13 | --module-path %classpath --module ${project.groupId}/${packageClassName} 14 | java 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /ServiceSample/nbproject/project.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | org.netbeans.modules.java.j2semodule 4 | 5 | 6 | ServiceSample 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /JavaFX/HelloFX/src/main/resources/org/wordlibrary/hellofx/primary.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |