====== HowTo create an ImageJ plugin jar file: Pitfalls and Tips ====== **Brief documentation on how to create an ImageJ jar file plugin.** I recently created my first ImageJ plugin, and wanted to make it a jar file. Seemingly easy, I did not find any documentation on the exact process, which cost me nearly 2 hours and a trip to the ImageJ source code! In an effort to make life easier for you, gentle reader, I've documented some of the pitfalls. - Plugins can go in the default package or a class with a package declaration. - Be sure to include an '_' in the filename of the jar file! This is apparently undocumented but very important. - Create a 'plugins.config' file as part of your jar. This tells ImageJ where to locate your plugin in it's menus. - The whitespace separating each element in a line must be a space (\s) character and not a tab (\t). The plugins.config has a format like this: # This is a comment # Each entry is menuname, "Command text", classname # This puts a command named "Foo" in the Plugins menu associated # with the "FancyPluginClass" class in the default package. Plugins, "Foo", FancyPluginClass #This puts a command named "Foo" in the Plugins>Moo menu associated with the "FooClass" class. Plugins>Moo, "Foo", FooClass #This puts a command named "Left" in the Plugins>Feet menu associated with the org.foo.LeftFootClass class Plugins>Feet, "Left", org.foo.LeftFootClass #This puts a separator between menu items Plugins>Feet, "-" #This puts a command named "Right" in the Plugins>Feet menu associated with the org.foo.RightFootClass class Plugins>Feet, "Right", org.foo.RightFootClass === plugins.config file pitfall === For each line, there should be no space after the class name. For example: File>New, "Blob1", my.test.Test1 File>New, "Blob2", my.test.Test2 These two lines might look same, but the first one works and the second not. This is because there is a space in the second line after my.test.Test2. It compiles Ok, but in runtime there will be an error message: > Plugin of class not found: "my.test.Test2" > (java.lang.ClassNotFoundException: my.test.Test2) Which will then be a bug that is very difficult to debug. **Check the trailing space first!** ==== Comments: ==== * **JAR Plugin demo documentation** There is information on how to package plugins in JAR files in the JAR Plugin demo at: * http://rsbweb.nih.gov/ij/plugins/jar-demo.html * **Jar File naming** The jar file itself must have an underscore in it, otherwise it won't be registered! * **Plugin Architecture** * detailed explanation on the architecture of plugin in [[http://fiji.sc/wiki/index.php/Description_of_ImageJ%27s_plugin_architecture|Fiji site]]. I hope this howto saves you all some time!