[ImageJ-devel] importing custom "uncompressed" libraries (i.e., no JAR)

Curtis Rueden ctrueden at wisc.edu
Tue Sep 30 11:33:50 CDT 2014


Hi Gaetano,

> I created a small example that requires my library

Thanks for the working example. I did some digging, and here is what I
discovered:

- Vanilla ImageJ1 does not have a "jars/" folder, so unpacking your JAR
there would not work in that scenario.

- Having an unpacked directory structure in "plugins/" _does_ work, though.

- The reason it doesn't work in ImageJ2 is because ImageJ2 recursively adds
all subdirectories of all classpath directory elements to the effective
classpath of the plugin class loader.

- I discussed with Johannes, and he decided not to support unpacked class
files anymore [1].

Personally, I think there is a bug lurking there -- probably only the
"plugins/" folder should have the recursive behavior described above -- but
it is an edge case which we do not have time to fix right now. However, if
you feel strongly about the issue, you are very welcome to submit a pull
request addressing it!

Otherwise, I'd encourage you to switch to an IDE, and/or JAR-based
development model. Let us know if you need further guidance with it. See
also: http://imagej.net/Development

Regards,
Curtis

[1]
http://code.imagej.net/chatlogs/imagejdev?times=prefix&start-date=2014-09-26&start-time=1500&end-date=2014-09-26&end-time=1700

On Tue, Sep 16, 2014 at 4:54 AM, Gaetano Impoco <gaetano at impoco.it> wrote:

> Hi Curtis,
>
> > Could you please provide a minimal, complete, verifiable example
> > demonstrating the issue?
>
> I created a small example that requires my library (please, download it at
> http://www.impoco.it/files/gijLib.jar)
>
> -------------
>
> import ij.*;
> import ij.process.*;
> import ij.plugin.filter.*;
> import java.awt.*;
> import java.awt.geom.*;
> import gijlib.binary.*;
> import gijlib.geom.*;
>
>
> public class Example_ implements PlugInFilter
> {
>   public int setup(String arg, ImagePlus imp)
>   {
>     return DOES_8G;
>   }
>
>   public void run(ImageProcessor ip)
>   {
>     ContourFollower cf = new ContourFollower(ip);
>     if(cf.getNContours() != 1)
>     {
>       IJ.error("The input image should contain one and only one
> object!\nFound
> "+cf.getNContours());
>       return;
>     }
>
>     Point[] contour = cf.getContour(0);
>     Point2D cHull[] = ConvexHull.grahamsScan(contour);
>
>     Line2D  diam    = PolygonUtilities.computeDiameter(cHull);
>     Line2D  odiam   = PolygonUtilities.computeOrthogonalDiameter(cHull,
> diam);
>     OrientedRectangle obbox = PolygonUtilities.computeBoundingRect(diam,
> odiam);
>   }
>
> }
>
> -------------
>
> When I put gijLib.jar in the "jars" directory and compile this class using
> the
> --javac option of the ij2 launcher, everything is ok. When I uncompress
> the JAR
> file into the "jars" directory, the compiler cannot find the classes in the
> library.
>
> Moreover, if I try to run a plugin that includes a class in the same
> directory
> (but not using packages) the compiler fails, as well. I avoid this problem
> using the option --class-path $HOME/Fiji.app/jars/
>
> Hope I gave enough information.
>
> Thank you
> Gaetano
>
>
>
>
> Quoting Curtis Rueden <ctrueden at wisc.edu>:
>
> > Hi Gaetano,
> >
> > > In my brand new Fiji installation, I can import my library only if I
> > > archive all .class files into a JAR file.
> >
> > IIUC, what you describe is still supposed to work.
> >
> >
> > http://imagej.net/Bug_reporting_best_practices
> >
> > Regards,
> > Curtis
> >
> > On Fri, Sep 12, 2014 at 6:05 AM, Gaetano Impoco <gaetano at impoco.it>
> wrote:
> >
> > > Dear all,
> > > I developed a custom library for my own convenience that used to work
> in
> > > ImageJ1.x. In my old IJ1 installation I used to add the library root
> > > directory
> > > to the Java CLASSPATH (using a simple bash script).
> > > In my brand new Fiji installation, I can import my library only if I
> > > archive all
> > > .class files into a JAR file. I would like to use JARs only for
> > > deployment. Is
> > > there any way to include the "uncompressed" (development version)
> library?
> > >
> > > Thank you
> > > Gaetano
> > >
> > >
> > >
> > > _______________________________________________
> > > ImageJ-devel mailing list
> > > ImageJ-devel at imagej.net
> > > http://imagej.net/mailman/listinfo/imagej-devel
> > >
> >
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://imagej.net/pipermail/imagej-devel/attachments/20140930/5f7abfaa/attachment.html>


More information about the ImageJ-devel mailing list