Component schema resource not found in project

I am trying to build out the simplest Perspective module possible just to add a button, and help me better understand the required pieces.

Currently things are all building correctly, however when my gateway hook is starting, it fails adding the component to the registry. It looks to be failing because when trying to get the object schema it can’t find the exampleButton.props.json file requested.

Here is the exception in question:

java.lang.ExceptionInInitializerError: null
at io.kgamble.test.gateway.TestGatewayHook.startup(TestGatewayHook.java:53)
at com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl$LoadedModule.startup(ModuleManagerImpl.java:2435)
at com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl.startupModule(ModuleManagerImpl.java:1228)
at com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl$2.call(ModuleManagerImpl.java:773)
at com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl.executeModuleOperation(ModuleManagerImpl.java:949)
at com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl.installModuleInternal(ModuleManagerImpl.java:739)
at com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl$InstallCommand.execute(ModuleManagerImpl.java:1905)
at com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl$Receiver.receiveCall(ModuleManagerImpl.java:1858)
at com.inductiveautomation.ignition.gateway.redundancy.QueueableMessageReceiver.receiveCall(QueueableMessageReceiver.java:47)
at com.inductiveautomation.ignition.gateway.redundancy.RedundancyManagerImpl.dispatchMessage(RedundancyManagerImpl.java:999)
at com.inductiveautomation.ignition.gateway.redundancy.RedundancyManagerImpl$ExecuteTask.run(RedundancyManagerImpl.java:1074)
at com.inductiveautomation.ignition.common.execution.impl.BasicExecutionEngine$ThrowableCatchingRunnable.run(BasicExecutionEngine.java:539)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException: null
at java.base/java.io.Reader.(Unknown Source)
at java.base/java.io.InputStreamReader.(Unknown Source)
at com.inductiveautomation.ignition.common.jsonschema.JsonSchema.parse(JsonSchema.java:78)
at io.kgamble.test.common.components.input.ExampleButton.(ExampleButton.java:20)

Here is link to a repo I threw it in:
GitHub - keith-gamble/minimal-perspective-module: A Minimal perspective module with just pure JS and CSS, no build tools.

One important note here, you will see I have just directly added the web files to the gateway resources, instead of building everything through a package tool and putting it there automatically. This is so I can better understand the requirements for a perspective module without all of the other tools adding confusion. This may be a part of the problem, it might be failing to get those resources and I am confusing the error for something else?

I really appreciate any help!

I found the problem! I had accidentally put my resources folder inside the java folder structure, and not at the main level.

What I did

src
----main
--------java
------------io
---------------kgamble
----------------------test
--------------------------common
--------------------------resources

What I should have done

src
----main
--------resources
--------java
------------io
---------------kgamble
----------------------test
--------------------------common