...
- Explode plugin jar file
For eg. PluginDataFramework.jar, you will get:
plugin.xml (Keep this)
PLUGIN-INF (Keep this)
lib - PluginDataFramework-classes.jar, ognl-2.6.7.jar (Delete this. Not required as it is already in your NexawebClient.jar) - Repackage inner classes jar files in lib folder
a. Unjar inner classes jarfiles
For eg.PluginDataFramework-classes.jar, you will get:
META-INF (delete this)
com\nexaweb\plugin\data directory structure with classesb. Create a folder nxPlugin-<plugin class name> inside exploded folder
For eg. PluginDataFramework-classes will have
com\nexaweb\plugin\data directory structure with classes
nxplugin-PluginDataFramework folderc. Move plugin.xml to nxPlugin-<plugin class name> folder
d. jar plugin classes into plugin classes jar file
For eg. PluginDataFramework-classes.jare. Sign inner plugin classes jar files
f. Remove exploded folder
- If <ui-test> is set to true in nexaweb-client.xml, it uses debug/plugin classes-debug jar files. You need to repeat same process as with plugin classes jar files.
- Jar main plugin folder.
- Create pre-loaded folder inside WebContent/WEB-INF/client/plugins
- Copy repackaged jar files into pre-loaded folder and delete jars from plugins
Add tag mapping for plugin.xml in your nexaweb-client.xml.
For eg.Code Block title nexaweb-client.xml <client-tag-mapping> <tag-map-file>classpath://nxplugin-PluginDataFramework/plugin.xml</tag-map-file> </client-tag-mapping>
Here is a sample ANT task to rearrange and sign nexaweb plugins jarsCode Block title Repackage Plugin jars <project default="repackagePluginJars" basedir="."> <property name="plugin.build.dir" value="PluginTempDir"/> <property name="plugin.dest.dir" value="${build.webcontent.dir}/WEB-INF/client/plugins/pre-loaded"/> <property name="plugin.src.dir" value="${build.webcontent.dir}/WEB-INF/client/plugins"/> <macrodef name="repackagePlugin" description="Repackages the given plugin jar from Nexaweb into a new jar that can be signed."> <attribute name="plugin"/> <sequential> <tempfile property="plugin.build.dir" deleteonexit="true" createfile="false"/> <mkdir dir="${plugin.build.dir}" /> <delete includeemptydirs="true"> <!-- clean up the temp directory that might have files from the last run --> <fileset dir="${plugin.build.dir}" includes="**/*" /> </delete> <!--unjar main plugin jar file --> <unjar src="${plugin.src.dir}/@{plugin}.jar" dest="${plugin.build.dir}" /> <!--- repackage classes jar files --> <repackage-classes plugin="@{plugin}" location="${plugin.build.dir}/lib" classname="@{plugin}-classes"/> <!-- created pre-loaded folder inside plugins --> <mkdir dir="${plugin.dest.dir}" /> <!--jar up and store jar files in pre-loaded folder --> <jar destfile="${plugin.dest.dir}/@{plugin}.jar" basedir="${plugin.build.dir}"/> </sequential> </macrodef> <macrodef name="repackage-classes"> <attribute name="plugin"/> <attribute name="location"/> <attribute name="classname"/> <sequential> <mkdir dir="@{location}/@{classname}" /> <!-- unjar inner classes jar file--> <unjar src="@{location}/@{classname}.jar" dest="@{location}/@{classname}"/> <!--delete -classes.jar , ognl.jar files in lib --> <delete> <fileset dir="@{location}/" > <include name="**/*.jar"/> </fileset> </delete> <!-- move plugin file to plugin-key folder --> <move file="${plugin.build.dir}/plugin.xml" todir="@{location}/@{classname}/nxplugin-@{plugin}" /> <!-- jar up inner classes files --> <jar destfile="@{location}/@{classname}.jar" basedir="@{location}/@{classname}"> <patternset> <exclude name="**/META-INF/**" /> <exclude name="**/*.jar" /> </patternset> </jar> <!--delete exploded folder --> <delete dir="@{location}/@{classname}"/> <!-- sign inner classes jar file --> <signjar alias="${keystore.alias}" keystore="${keystore.file}" storepass="${keystore.password}" lazy="true"> <path> <fileset dir="@{location}" includes="**/*.jar" /> </path> </signjar> </sequential> </macrodef> <macrodef name="delete-files-from-plugin"> <sequential> <delete> <fileset dir="${plugin.src.dir}"> <exclude name="**/pre-loaded/**" /> </fileset> </delete> </sequential> </macrodef> <target name="repackagePluginJars" description="Repackages the Nexaweb plugin jars so they can be signed properly" > <repackagePlugin plugin="PluginDataFramework"/> <repackagePlugin plugin="PluginDataRequest"/> <delete-files-from-plugin/> </target> </project>
...