From a052c4757378020c0d5348ecda6f58159867f2eb Mon Sep 17 00:00:00 2001 From: Markil3 <> Date: Mon, 14 Dec 2020 11:56:48 -0700 Subject: [PATCH] Changes the build structure to put the library in its own project. This cleans up dependencies some. --- .gitignore | 1 + README.md | 4 +- build.gradle | 62 ++++++++++--- library/build.gradle | 93 +++++++++++++++++++ .../controller/JoystickPreviewScreen.java | 72 ++++++++++---- settings.gradle | 1 + src/main/java/markil3/controller/Main.java | 55 ----------- 7 files changed, 203 insertions(+), 85 deletions(-) create mode 100644 library/build.gradle rename {src => library/src}/main/java/markil3/controller/JoystickPreviewScreen.java (95%) diff --git a/.gitignore b/.gitignore index e48eda6..62b1604 100644 --- a/.gitignore +++ b/.gitignore @@ -23,5 +23,6 @@ hs_err_pid* /local.properties /build/ +/library/build/ /.idea/ /.gradle/ diff --git a/README.md b/README.md index c85cc1d..17e537b 100644 --- a/README.md +++ b/README.md @@ -24,9 +24,9 @@ Alternatively, you can [download the zip file](https://github.com/Markil3/JMECon Once downloaded, point the command line to the directory that the source was downloaded and extracted to and run -gradlew build +gradlew library:build -This will create three .jar files in the build/libs directory, one binary, the second (with the -source suffix) containing the source code, and the final one (with the -javadoc suffix) containing documentation. +This will create three .jar files in the library/build/libs directory, one binary, the second (with the -source suffix) containing the source code, and the final one (with the -javadoc suffix) containing documentation. ## Testing If you want to test this without implementing it in your software, simply download the source as outlined above and run diff --git a/build.gradle b/build.gradle index c574dac..68c0d6c 100644 --- a/build.gradle +++ b/build.gradle @@ -17,15 +17,14 @@ buildscript { jcenter() google() } - - dependencies { - classpath 'com.android.tools.build:gradle:4.1.0' - } } plugins { - id "java-library" id "application" + id "distribution" + id "com.github.johnrengelman.shadow" version "5.0.0" + id "edu.sc.seis.launch4j" version "2.4.5" + id "edu.sc.seis.macAppBundle" version "2.3.0" } repositories { @@ -52,10 +51,9 @@ dependencies { implementation "org.slf4j:slf4j-api:1.7.15" implementation "org.slf4j:slf4j-simple:1.7.5" + implementation project(':library') implementation "${jme3.g}:jme3-core:${jme3.version}" implementation "${jme3.g}:jme3-desktop:${jme3.version}" - implementation "${jme3.g}:jme3-testdata:${jme3.version}" - implementation "${jme3.g}:jme3-lwjgl3:${jme3.version}" } @@ -64,19 +62,61 @@ mainClassName = 'markil3.controller.Main' version = "1.0" versionNumber = 1 -java { - withSourcesJar() - withJavadocJar() +processResources { + from (".") { + include "LICENSE" + include "JME3-LICENSE" + } } +/* + * TODO - The default zipped distributions are a bit of a mess. + */ jar { + baseName rootProject.name + version rootProject.version manifest { attributes "Main-Class": mainClassName, "Class-Path": configurations.runtime.files.collect { "lib/$it.name" }.join(" "), - "Implementation-Title": rootProject.displayName, + "Implementation-Title": rootProject.name, "Implementation-Version": rootProject.version, "Version-Code": versionNumber } } + +shadowJar { + archivesBaseName = rootProject.name + archiveClassifier = "universal" + version = rootProject.version + mainClassName = project.mainClassName +} + +launch4j { + mainClassName = project.mainClassName + outfile = rootProject.name + "-" + project.version + "-windows.exe" + copyConfigurable = shadowJar.outputs.files + jar = shadowJar.getArchiveFile() + bundledJrePath = "jre" + //icon = new File(sourceSets.main.resources.srcDirs[0], "icon256.ico") +} + +createExe.doLast({ + println project.tasks.installDist.outputs.files.getClass() + for (file in new File(installDist.outputs.files[0], "lib").listFiles()) { + println file + } +}) + +macAppBundle { + mainClassName = project.mainClassName + icon = "myIcon.icns" + if (Os.isFamily(Os.FAMILY_MAC) && (appStyle == 'Oracle' || appStyle == 'universalJavaApplicationStub')) { + bundleJRE = true + } + javaProperties.put("apple.laf.useScreenMenuBar", "true") + backgroundImage = "doc/macbackground.png" + jarTask = "shadowJar" +} + diff --git a/library/build.gradle b/library/build.gradle new file mode 100644 index 0000000..033964e --- /dev/null +++ b/library/build.gradle @@ -0,0 +1,93 @@ +/* + * Copyright 2020 Markil 3. All rights reserved. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import org.apache.tools.ant.taskdefs.condition.Os + +import java.nio.file.Files + +buildscript { + repositories { + jcenter() + google() + } +} + +plugins { + id "java-library" +} + +repositories { + google() + jcenter() + mavenCentral() + maven { url 'https://jitpack.io' } + maven { + url "https://dl.bintray.com/jmonkeyengine/org.jmonkeyengine" + } +} + +sourceCompatibility = "1.8" +targetCompatibility = "1.8" +[compileJava, compileTestJava]*.options*.encoding = 'UTF-8' + +dependencies { + // Logging + implementation "org.slf4j:slf4j-api:1.7.15" + implementation "org.slf4j:slf4j-simple:1.7.5" + + implementation "${jme3.g}:jme3-core:${jme3.version}" + implementation "${jme3.g}:jme3-testdata:${jme3.version}" +} + +processResources { + from ("..") { + include "LICENSE" + include "JME3-LICENSE" + } +} + +/* + * TODO - Why does the shadowjar task in the main project run when we use library:build? + */ +java { + withSourcesJar() + withJavadocJar() +} + +sourcesJar { + baseName rootProject.name + version rootProject.version + from ("..") { + include "LICENSE" + include "JME3-LICENSE" + } +} + +javadocJar { + baseName rootProject.name + version rootProject.version + from ("..") { + include "LICENSE" + include "JME3-LICENSE" + } +} + +jar { + baseName rootProject.name + version rootProject.version + manifest { + attributes "Class-Path": configurations.runtime.files.collect { + "lib/$it.name" + }.join(" "), + "Implementation-Title": rootProject.name, + "Implementation-Version": rootProject.version, + "Version-Code": rootProject.versionNumber + } +} diff --git a/src/main/java/markil3/controller/JoystickPreviewScreen.java b/library/src/main/java/markil3/controller/JoystickPreviewScreen.java similarity index 95% rename from src/main/java/markil3/controller/JoystickPreviewScreen.java rename to library/src/main/java/markil3/controller/JoystickPreviewScreen.java index e7742a7..1853bfc 100644 --- a/src/main/java/markil3/controller/JoystickPreviewScreen.java +++ b/library/src/main/java/markil3/controller/JoystickPreviewScreen.java @@ -45,23 +45,6 @@ import org.slf4j.LoggerFactory; import java.util.HashMap; import java.util.Map; -import static markil3.controller.Main.ACTION_BOTTOM; -import static markil3.controller.Main.ACTION_LEFT; -import static markil3.controller.Main.ACTION_RIGHT; -import static markil3.controller.Main.ACTION_TOP; -import static markil3.controller.Main.DPAD_DOWN; -import static markil3.controller.Main.DPAD_LEFT; -import static markil3.controller.Main.DPAD_RIGHT; -import static markil3.controller.Main.DPAD_UP; -import static markil3.controller.Main.L1; -import static markil3.controller.Main.L2; -import static markil3.controller.Main.L3; -import static markil3.controller.Main.R1; -import static markil3.controller.Main.R2; -import static markil3.controller.Main.R3; -import static markil3.controller.Main.SELECT; -import static markil3.controller.Main.START; - /** * Adding this app state will display a GUI screen showing the controllers * connected and information on what buttons are pressed. It is primarily @@ -85,6 +68,61 @@ public class JoystickPreviewScreen extends BaseAppState private static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(JoystickPreviewScreen.class); + /** + * Triangle on Playstation, Y on Xbox, and X on Nintendo. + */ + public static final String ACTION_TOP = JoystickButton.BUTTON_0; + /** + * Circle on Playstation, B on Xbox, and A on Nintendo. + */ + public static final String ACTION_RIGHT = JoystickButton.BUTTON_1; + /** + * X on Playstation, A on Xbox, and B on Nintendo. + */ + public static final String ACTION_BOTTOM = JoystickButton.BUTTON_2; + /** + * Square on Playstation, X on Xbox, and Y on Nintendo. + */ + public static final String ACTION_LEFT = JoystickButton.BUTTON_3; + public static final String L1 = JoystickButton.BUTTON_4; + public static final String R1 = JoystickButton.BUTTON_5; + /** + * Some gamepads (Xbox controllers notable) will use + * {@link JoystickAxis#LEFT_TRIGGER} instead. + */ + public static final String L2 = JoystickButton.BUTTON_6; + /** + * Some gamepads (Xbox controllers notable) will use + * {@link JoystickAxis#RIGHT_TRIGGER} instead. + */ + public static final String R2 = JoystickButton.BUTTON_7; + public static final String SELECT = JoystickButton.BUTTON_8; + public static final String START = JoystickButton.BUTTON_9; + /** + * Pressing the left analog stick. + */ + public static final String L3 = JoystickButton.BUTTON_10; + /** + * Pressing the right analog stick. + */ + public static final String R3 = JoystickButton.BUTTON_11; + /** + * Most gamepads may use {@link JoystickAxis#POV_X} instead. + */ + public static final String DPAD_LEFT = "12"; + /** + * Most gamepads may use {@link JoystickAxis#POV_X} instead. + */ + public static final String DPAD_RIGHT = "13"; + /** + * Most gamepads may use {@link JoystickAxis#POV_Y} instead. + */ + public static final String DPAD_UP = "14"; + /** + * Most gamepads may use {@link JoystickAxis#POV_Y} instead. + */ + public static final String DPAD_DOWN = "15"; + /** * This node serves as the center of logic for each gamepad connected to * the computer. diff --git a/settings.gradle b/settings.gradle index 2fa34b9..1b27ef1 100644 --- a/settings.gradle +++ b/settings.gradle @@ -16,3 +16,4 @@ include 'services:webservice' */ rootProject.name = 'JMEControllerConfig' +include "library" \ No newline at end of file diff --git a/src/main/java/markil3/controller/Main.java b/src/main/java/markil3/controller/Main.java index 50fc4ad..0572eda 100644 --- a/src/main/java/markil3/controller/Main.java +++ b/src/main/java/markil3/controller/Main.java @@ -28,61 +28,6 @@ public class Main extends SimpleApplication private static final org.slf4j.Logger logger = org.slf4j.LoggerFactory. getLogger(Main.class); - /** - * Triangle on Playstation, Y on Xbox, and X on Nintendo. - */ - public static final String ACTION_TOP = JoystickButton.BUTTON_0; - /** - * Circle on Playstation, B on Xbox, and A on Nintendo. - */ - public static final String ACTION_RIGHT = JoystickButton.BUTTON_1; - /** - * X on Playstation, A on Xbox, and B on Nintendo. - */ - public static final String ACTION_BOTTOM = JoystickButton.BUTTON_2; - /** - * Square on Playstation, X on Xbox, and Y on Nintendo. - */ - public static final String ACTION_LEFT = JoystickButton.BUTTON_3; - public static final String L1 = JoystickButton.BUTTON_4; - public static final String R1 = JoystickButton.BUTTON_5; - /** - * Some gamepads (Xbox controllers notable) will use - * {@link JoystickAxis#LEFT_TRIGGER} instead. - */ - public static final String L2 = JoystickButton.BUTTON_6; - /** - * Some gamepads (Xbox controllers notable) will use - * {@link JoystickAxis#RIGHT_TRIGGER} instead. - */ - public static final String R2 = JoystickButton.BUTTON_7; - public static final String SELECT = JoystickButton.BUTTON_8; - public static final String START = JoystickButton.BUTTON_9; - /** - * Pressing the left analog stick. - */ - public static final String L3 = JoystickButton.BUTTON_10; - /** - * Pressing the right analog stick. - */ - public static final String R3 = JoystickButton.BUTTON_11; - /** - * Most gamepads may use {@link JoystickAxis#POV_X} instead. - */ - public static final String DPAD_LEFT = "12"; - /** - * Most gamepads may use {@link JoystickAxis#POV_X} instead. - */ - public static final String DPAD_RIGHT = "13"; - /** - * Most gamepads may use {@link JoystickAxis#POV_Y} instead. - */ - public static final String DPAD_UP = "14"; - /** - * Most gamepads may use {@link JoystickAxis#POV_Y} instead. - */ - public static final String DPAD_DOWN = "15"; - public static void main(String[] args) { Main app = new Main();