Hi everyone,<br><br>Recently I did some digging into a problem we have been having: when compiling ImageJDev code inside Eclipse, it does not execute annotation processors. The result is that when running ImageJ2 from Eclipse, none of the dependency injection works—no IJ2 plugins are discovered, etc.<br>

<br>DETAILS:<br>



<br>Both SezPoz and NetBeans Lookup make use of annotation processors—listed in the relevant JARs&#39; META-INF/services/javax.annotation.processing.Processor file—to write additional information to the target project&#39;s META-INF directory. For example, in the case of NetBeans Lookup, it adds the class to the META-INF/services/whatever-service file.<br>





<br>It turns out that unlike Javac and NetBeans, Eclipse does not enable annotation processing by default. And there is no way to turn it on by default—it must be enabled on a project-by-project basis. Further, JARs containing relevant annotation processors must then be explicitly listed in the project configuration under Java Compiler &gt; Annotation Processing &gt; Factory Path.<br>





<br>The SezPoz homepage makes mention of these facts, as follows:<br><br><div style="margin-left: 40px;">Eclipse-specific notes: make sure annotation processing is enabled at least for any
projects registering objects using annotations. Make sure the SezPoz library is
in the factory path for annotation processors. You also need to check the box
<b>Run this container&#39;s processor in batch mode</b> from the <b>Advanced</b>
button in <b>Java Compiler &gt; Annotation Processing &gt; Factory Path</b>.
There does not appear to be any way for Eclipse to discover processors
in the regular classpath as JSR 269 suggests, and there does not appear to be
any way to make these settings apply automatically to all projects.
Eclipse users are recommended to use javac (e.g. via Maven) to build.
<a href="http://help.eclipse.org/ganymede/index.jsp?topic=/org.eclipse.jdt.doc.isv/guide/jdt_apt_getting_started.htm" target="_blank">Eclipse Help Page</a>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280542" target="_blank">Eclipse bug #280542</a><br></div><br>Further, if anything goes wrong during annotation processing, Eclipse logs the error to .metadata/.log in its workspace, but does not report the problem in the user interface, making debugging difficult.<br>

<br>SOLUTION:<br><br>We could make SezPoz work automatically from Eclipse by committing certain metadata files to the repository. However, there is a further problem with using NetBeans Lookup from Eclipse: it throws a cryptic exception (to the .metadata/.log) when its annotation processor is invoked. Hence, NetBeans Lookup still won&#39;t work properly, even with Eclipse properly configured.<br>

<br>So for now, the easiest way to run ImageJ2 is to do a clean build by invoking Maven, and then running a simple shell script:<br><br><div style="margin-left: 40px;">$ mvn -DskipTests clean install<br>$ cd imagej<br>$ ./run<br>

</div><br>In conclusion, this bug, <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280542" target="_blank">#280542</a>, is a serious limitation in Eclipse, and I encourage any interested developers to vote for a resolution.<br>






<br>
-Curtis<br><br>