Page 1 of 1
oxygen plugin that has dependency of other jar
Posted: Thu Jan 20, 2022 8:44 pm
by vishwavaranasi
Hello Team , we have a oxygen plugin that has dependency of other jar , lets say library.jar , this library jar is custom file system provider implementation , this jar has under resources META-INF/services/java.nio.file.spi.FileSystemProvider(it has the entry of com.xxx.xxx.xx.xxx.CustomFileSystemProvider.
issue here the plugin not able to call the any methods inside CustomFileSystemProvider. any help would be appreciated , is there anything we need provide to our plugin.jar?
we have copied library.jar and plugin.ajr under plugins folder.
Thanks,
vishwa
Re: oxygen plugin that has dependency of other jar
Posted: Fri Jan 21, 2022 7:30 am
by Radu
Hi,
Each Oxygen plugin has a "plugin.xml" descriptor file which references JAR libraries. Oxygen loads all those JAR libraries for each plugin when it starts. So if a plugin uses a JAR library it needs to refer to it in the plugin.xml, otherwise it would need to create its own class loader and dynamically load it.
https://www.oxygenxml.com/doc/ug-editor ... lugin.html
Regards,
Radu
Re: oxygen plugin that has dependency of other jar
Posted: Fri Jan 21, 2022 11:17 am
by vishwavaranasi
Thanks Radu ,
we have already copied manually the dependent jars to lib as below
Code: Select all
C:\<path>\oxygen\plugins\oxygen-plugin-workspace-access-1.0\lib\oxygen-plugin-workspace-access-1.0.jar
C:\<path>\oxygen\plugins\oxygen-plugin-workspace-access-1.0\lib\library.jar
C:\<path>\oxygen\plugins\oxygen-plugin-workspace-access-1.0\plugin.xml
and plugin.xml as below
Code: Select all
<?xml version="1.0" encoding="UTF-8"?>
<!-- The plugin.dtd file is located in the OXYGEN_INSATALL_DIR/plugins directory -->
<!DOCTYPE plugin SYSTEM "../plugin.dtd">
<plugin
id="com.xxx.xx.xx.xx.WorkspaceAccess"
name="xxxWorkspaceAccess"
description="Test"
version="${project.version}"
vendor="oXygen XML"
class="com.xx.xx.xx.workspace.WorkspaceAccessPlugin"
classLoaderType="preferReferencedResources">
<runtime>
<librariesFolder name="lib" />
<library name="target/classes" />
<librariesFolder name="target/lib" />
</runtime>
<extension type="WorkspaceAccess"
class="com.xx.xx.xx.workspace.xxxWorkspaceAccessPluginExtension"/>
<!--
<extension type="WorkspaceAccess"
class="com.xxx.xx.xx.workspace.CustomWorkspaceAccessPluginExtension"/>-->
<!--The sample view which will present messages from the sample plugin.-->
<view id="xxxxWorkspaceAccessID" initialSide="WEST" initialRow="0" description="xxOxygen Workspace" />
<!--The sample toolbar which will present messages from the sample plugin.-->
<toolbar id="xxxxWorkspaceAccessID" initialSide="NORTH" initialRow="1"/>
</plugin>
Re: oxygen plugin that has dependency of other jar
Posted: Fri Jan 21, 2022 12:01 pm
by Radu
Hi,
This looks good to me, so what Exception gets thrown by Oxygen at runtime?
Regards,
Radu
Re: oxygen plugin that has dependency of other jar
Posted: Sat Jan 22, 2022 9:10 pm
by vishwavaranasi
Hello Radu , the library.jar has has a custom java.nio.file.FileSystemProvider implemented named "test123" , the library.jar has META-INF/services/java.nio.file.spi.FileSystemProvider (this is a text file has the entry like ->com.xxx.xxx.xxx.xxx.CustomFileSystemProvider)
from the plugin we tried invoking as
FileSystem fs = FileSystems.newFileSystem(new URI("test123://default"), env);
plugin registered ..and opened oxygen , when we invoke from one of the plugin functions we got the following error.
Exception in thread "AWT-EventQueue-0" java.nio.file.FileSystemNotFoundException: Provider "test123" not installed
thanks for your help on this.
Thanks,
vishwa
Re: oxygen plugin that has dependency of other jar
Posted: Mon Jan 24, 2022 8:37 am
by Radu
Hi Vishwa,
By default the plugin has its own Java class loader, maybe you can add all your libraries with higher priority:
Code: Select all
<runtime>
<librariesFolder name="lib" scope="global"/>
<library name="target/classes" scope="global"/>
<librariesFolder name="target/lib" scope="global"/>
</runtime>
Does that work for you?
If not maybe use this method instead:
Code: Select all
java.nio.file.FileSystems.newFileSystem(URI, Map<String, ?>, ClassLoader)
and for the ClassLoader parameter pass something like "YourPluginClass.class.getClassLoader()" so that you use the plugin's own class loader to search for the implementation.
Regards,
Radu
Re: oxygen plugin that has dependency of other jar
Posted: Mon Jan 24, 2022 4:31 pm
by vishwavaranasi
Thanks a lot Radu..
passing class loader xxxx.class.getClassLoader() to FileSystems.newFileSystem - worked for us.
Thanks,
vishwa