Adding a build section to the POM: <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.3</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <manifestEntries> <Main-Class>com.mycompany.app.App</Main-Class> <Build-Number>123</Build-Number> </manifestEntries> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build>
To the POM gives me a self contained runnable jar. Progress! I’m learning. BUT as before when I run the jar, I get the Exception: No compatible service: org.scijava.service.SciJavaService ================================================================= [Michaels-Retina:~/temp/deleteme/my-app] michaelellis% java -jar target/my-app-1.0-SNAPSHOT.jar Hello World! Exception: No compatible service: org.scijava.service.SciJavaService ================================================================= Still vexed! On 5 Dec 2014, at 17:17, Curtis Rueden <ctrue...@wisc.edu> wrote: > Hi Michael, > > > mvn claims to build everything OK > > Yep, it did build successfully. > > > % java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App > > Error: A JNI error has occurred, please check your installation and try > > again > > Exception in thread "main" java.lang.NoClassDefFoundError: io/scif/SCIFIO > > Maven is primarily a build tool. It puts the correct JARs on your classpath > at compile time. In your case, that is scifio-0.17.1.jar and its dependencies. > > However, the way you are launching your program is not putting the required > dependencies on the classpath. You put only my-app-1.0-SNAPSHOT.jar on the > classpath, and its dependencies are missing. So of course Java cannot find > the needed classes. > > The gist is: it is your responsibility to assemble the dependencies and > ensure they are on the classpath somehow when you launch your application. > > There are several ways to accomplish this. Here is one generally useful way > using Maven, which does not assume you are doing anything ImageJ-related: > > $ mvn dependency:copy-dependencies > $ java -cp 'target/my-app-1.0-SNAPSHOT.jar:target/dependency/*' > com.mycompany.app.App > > The "copy-dependencies" goal copies all the JAR files needed by your program > into the target/dependency folder, for easy subsequent consumption. > > Alternately, the "ImageJ way" of dealing with deployment is to ship all > needed dependencies in the "jars" folder of your ImageJ application. We > created a Maven goal for this too, which you can use as follows: > > $ mvn -Dimagej.app.directory=/Applications/ImageJ.app > -Ddelete.other.versions=true > > Which will copy your JAR and its dependencies into your ImageJ installation > at /Applications/ImageJ.app. But note that in order for this goal to work, > you must extend the pom-imagej parent (see > https://github.com/imagej/minimal-ij1-plugin for an example). > > A third solution is to use the exec-maven-plugin to launch your application > directly using Maven. E.g.: > https://github.com/imagej/imagej/blob/imagej-2.0.0-rc-17/pom.xml#L255-L278 > > Regards, > Curtis > > On Fri, Dec 5, 2014 at 11:03 AM, Michael Ellis <michael.el...@dsuk.biz> wrote: > Curtis, > > Thanks but it is still not working. > > I have cut out using NetBeans and am now just using the CLI and a text > editor. > > POM as follows: > > ======================================================== > <project xmlns="http://maven.apache.org/POM/4.0.0" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 > http://maven.apache.org/xsd/maven-4.0.0.xsd"> > <modelVersion>4.0.0</modelVersion> > > <groupId>com.mycompany.app</groupId> > <artifactId>my-app</artifactId> > <version>1.0-SNAPSHOT</version> > <packaging>jar</packaging> > > <name>my-app</name> > <url>http://maven.apache.org</url> > > <properties> > <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> > </properties> > > <repositories> > <repository> > <id>imagej.public</id> > <url>http://maven.imagej.net/content/groups/public</url> > </repository> > </repositories> > > <dependencies> > <dependency> > <groupId>junit</groupId> > <artifactId>junit</artifactId> > <version>3.8.1</version> > <scope>test</scope> > </dependency> > > <dependency> > <groupId>io.scif</groupId> > <artifactId>scifio</artifactId> > <version>0.17.1</version> > </dependency> > > </dependencies> > </project> > ======================================================== > > File hierarchy: > > . > ./.DS_Store > ./pom.xml > ./src > ./src/main > ./src/main/java > ./src/main/java/com > ./src/main/java/com/mycompany > ./src/main/java/com/mycompany/app > ./src/main/java/com/mycompany/app/App.java > ./src/test > ./src/test/java > ./src/test/java/com > ./src/test/java/com/mycompany > ./src/test/java/com/mycompany/app > ./src/test/java/com/mycompany/app/AppTest.java > ======================================================== > > App.java as follows: > > package com.mycompany.app; > > import io.scif.FormatException; > import io.scif.ImageMetadata; > import io.scif.Plane; > import io.scif.Reader; > import io.scif.SCIFIO; > > public class App > { > public static void main( String[] args ) > { > try { > System.out.println( "Hello World!" ); > SCIFIO scifio = new SCIFIO(); > String sampleImage > = > "8bit-signed&pixelType=int8&lengths=50,50,3,5,7&axes=X,Y,Z,Channel,Time.fake"; > final Reader reader = > scifio.initializer().initializeReader(sampleImage); > System.out.printf("reader=%s%n", reader ); > } catch (Exception e) { > System.out.printf("Exception: %s%n", e.getMessage() ); > } > } > } > > ======================================================== > > mvm -U install > > [Michaels-Retina:~/temp/deleteme/my-app] michaelellis% mvn -U install > [INFO] Scanning for projects... > [INFO] > > [INFO] > ------------------------------------------------------------------------ > [INFO] Building my-app 1.0-SNAPSHOT > [INFO] > ------------------------------------------------------------------------ > [INFO] > [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ my-app > --- > [INFO] Using 'UTF-8' encoding to copy filtered resources. > [INFO] skip non existing resourceDirectory > /Users/michaelellis/temp/deleteme/my-app/src/main/resources > [INFO] > [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ my-app --- > [INFO] Changes detected - recompiling the module! > [INFO] Compiling 1 source file to > /Users/michaelellis/temp/deleteme/my-app/target/classes > [INFO] > [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ > my-app --- > [INFO] Using 'UTF-8' encoding to copy filtered resources. > [INFO] skip non existing resourceDirectory > /Users/michaelellis/temp/deleteme/my-app/src/test/resources > [INFO] > [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ > my-app --- > [INFO] Changes detected - recompiling the module! > [INFO] Compiling 1 source file to > /Users/michaelellis/temp/deleteme/my-app/target/test-classes > [INFO] > [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ my-app --- > [INFO] Surefire report directory: > /Users/michaelellis/temp/deleteme/my-app/target/surefire-reports > > ------------------------------------------------------- > T E S T S > ------------------------------------------------------- > Running com.mycompany.app.AppTest > Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.005 sec > > Results : > > Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 > > [INFO] > [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ my-app --- > [INFO] Building jar: > /Users/michaelellis/temp/deleteme/my-app/target/my-app-1.0-SNAPSHOT.jar > [INFO] > [INFO] --- maven-install-plugin:2.4:install (default-install) @ my-app --- > [INFO] Installing > /Users/michaelellis/temp/deleteme/my-app/target/my-app-1.0-SNAPSHOT.jar to > /Users/michaelellis/.m2/repository/com/mycompany/app/my-app/1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.jar > [INFO] Installing /Users/michaelellis/temp/deleteme/my-app/pom.xml to > /Users/michaelellis/.m2/repository/com/mycompany/app/my-app/1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.pom > [INFO] > ------------------------------------------------------------------------ > [INFO] BUILD SUCCESS > [INFO] > ------------------------------------------------------------------------ > [INFO] Total time: 1.962 s > [INFO] Finished at: 2014-12-05T16:59:50+00:00 > [INFO] Final Memory: 18M/242M > [INFO] ———————————————————————————————————— > > ======================================================== > > mvn claims to build everything OK there seems to be no inclusion of any scif > libraries or class files. > > > When I run it I get: > > [Michaels-Retina:~/temp/deleteme/my-app] michaelellis% java -cp > target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App > Error: A JNI error has occurred, please check your installation and try again > Exception in thread "main" java.lang.NoClassDefFoundError: io/scif/SCIFIO > at java.lang.Class.getDeclaredMethods0(Native Method) > at java.lang.Class.privateGetDeclaredMethods(Class.java:2699) > at java.lang.Class.privateGetMethodRecursive(Class.java:3046) > at java.lang.Class.getMethod0(Class.java:3016) > at java.lang.Class.getMethod(Class.java:1782) > at > sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544) > at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526) > Caused by: java.lang.ClassNotFoundException: io.scif.SCIFIO > at java.net.URLClassLoader.findClass(URLClassLoader.java:381) > at java.lang.ClassLoader.loadClass(ClassLoader.java:424) > at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) > at java.lang.ClassLoader.loadClass(ClassLoader.java:357) > ... 7 more > > > ======================================================== > > I’ve been banging my head against this for two days now. > > So any help appreciated > > > On 5 Dec 2014, at 16:35, Curtis Rueden <ctrue...@wisc.edu> wrote: > >> Hi Michael, >> >> > The POM for io.scif:scifio:jar:0.17.1 is missing, no dependency >> > information available >> >> Make sure you have the following <repositories> block in your POM: >> >> <repositories> >> <repository> >> <id>imagej.public</id> >> <url>http://maven.imagej.net/content/groups/public</url> >> </repository> >> </repositories> >> >> Then rebuild with the "-U" flag. I don't know how to do this from NetBeans, >> but you only need to do it once from the CLI -- then you can return to >> NetBeans and it should work. >> >> Regards, >> Curtis >> >> On Fri, Dec 5, 2014 at 6:07 AM, Michael Ellis <michael.el...@dsuk.biz> wrote: >> I have followed the advice offered by Curtis regarding adding the io.scif: >> scifio dependency to my POM >> >> The dependency part of my POM looks like this: >> >> <dependencies> >> <dependency> >> <groupId>net.imglib2</groupId> >> <artifactId>imglib2</artifactId> >> <version>2.2.1-SNAPSHOT</version> >> <type>jar</type> >> </dependency> >> <dependency> >> <groupId>io.scif</groupId> >> <artifactId>scifio</artifactId> >> <version>0.17.1</version> >> <type>jar</type> >> </dependency> >> </dependencies> >> >> I am using NetBeans IDE, configured for use with maven project (I am slo >> using Java 8 and JavaFX) >> >> However when I attempt to Build (or Build with Dependencies) within >> NetBeans, I get the following error message: >> ============================================================ >> >> cd /Users/michaelellis/Documents/Development/MavenImgLib2FX; >> JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home >> "/Applications/NetBeans/NetBeans >> 8.0.app/Contents/Resources/NetBeans/java/maven/bin/mvn" install >> Scanning for projects... >> >> ------------------------------------------------------------------------ >> Building MavenImgLib2FX 1.0-SNAPSHOT >> ------------------------------------------------------------------------ >> The POM for io.scif:scifio:jar:0.17.1 is missing, no dependency information >> available >> ------------------------------------------------------------------------ >> BUILD FAILURE >> ------------------------------------------------------------------------ >> Total time: 0.341s >> Finished at: Fri Dec 05 10:34:41 GMT 2014 >> Final Memory: 7M/245M >> ------------------------------------------------------------------------ >> Failed to execute goal on project MavenImgLib2FX: Could not resolve >> dependencies for project biz.dsuk:MavenImgLib2FX:jar:1.0-SNAPSHOT: Failure >> to find io.scif:scifio:jar:0.17.1 in http://repo.maven.apache.org/maven2 was >> cached in the local repository, resolution will not be reattempted until the >> update interval of central has elapsed or updates are forced -> [Help 1] >> >> To see the full stack trace of the errors, re-run Maven with the -e switch. >> Re-run Maven using the -X switch to enable full debug logging. >> >> For more information about the errors and possible solutions, please read >> the following articles: >> [Help 1] >> http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException >> >> ============================================================ >> >> If I open a terminal window and cd into the project directory and: >> >> mvn clean package >> >> It succeeds. >> >> However, when I then attempt to run the project with: >> >> java -cp MavenImgLib2FX-1.0-SNAPSHOT.jar biz.dsuk.mavenimglib2fx.MainApp >> >> The application starts to execute but throws “No compatible service: >> io.scif.SCIFIOService” exception. >> ============================================================ >> >> img1=CellImg [20x30] >> BufferedImage=BufferedImage@3137c585: type = 10 ColorModel: #pixelBits = 8 >> numComponents = 1 color space = java.awt.color.ICC_ColorSpace@134d9d5f >> transparency = 1 has alpha = false isAlphaPre = false ByteInterleavedRaster: >> width = 707 height = 699 #numDataElements 1 dataOff[0] = 0 >> Loading image... >> Exception in Application start method >> java.lang.reflect.InvocationTargetException >> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >> at >> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) >> at >> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) >> at java.lang.reflect.Method.invoke(Method.java:497) >> at >> com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:363) >> at >> com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:303) >> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >> at >> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) >> at >> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) >> at java.lang.reflect.Method.invoke(Method.java:497) >> at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767) >> Caused by: java.lang.RuntimeException: Exception in Application start method >> at >> com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:875) >> at >> com.sun.javafx.application.LauncherImpl.lambda$launchApplication$150(LauncherImpl.java:157) >> at >> com.sun.javafx.application.LauncherImpl$$Lambda$50/553264065.run(Unknown >> Source) >> at java.lang.Thread.run(Thread.java:745) >> Caused by: java.lang.IllegalArgumentException: No compatible service: >> io.scif.SCIFIOService >> at org.scijava.service.ServiceHelper.loadService(ServiceHelper.java:243) >> at org.scijava.service.ServiceHelper.loadService(ServiceHelper.java:194) >> at >> org.scijava.service.ServiceHelper.loadServices(ServiceHelper.java:170) >> at org.scijava.Context.<init>(Context.java:244) >> at org.scijava.Context.<init>(Context.java:203) >> at org.scijava.Context.<init>(Context.java:142) >> at org.scijava.Context.<init>(Context.java:128) >> at io.scif.SCIFIO.<init>(SCIFIO.java:81) >> at biz.dsuk.mavenimglib2fx.MainApp.start(MainApp.java:38) >> at >> com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$156(LauncherImpl.java:821) >> at >> com.sun.javafx.application.LauncherImpl$$Lambda$53/681110827.run(Unknown >> Source) >> at >> com.sun.javafx.application.PlatformImpl.lambda$runAndWait$169(PlatformImpl.java:326) >> at >> com.sun.javafx.application.PlatformImpl$$Lambda$47/693632176.run(Unknown >> Source) >> at >> com.sun.javafx.application.PlatformImpl.lambda$null$167(PlatformImpl.java:295) >> at >> com.sun.javafx.application.PlatformImpl$$Lambda$49/1260282780.run(Unknown >> Source) >> at java.security.AccessController.doPrivileged(Native Method) >> at >> com.sun.javafx.application.PlatformImpl.lambda$runLater$168(PlatformImpl.java:294) >> at >> com.sun.javafx.application.PlatformImpl$$Lambda$48/1364335809.run(Unknown >> Source) >> at >> com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) >> Exception running application biz.dsuk.mavenimglib2fx.MainApp >> ============================================================ >> >> If I remove the calls to the SCIO code and build and run from the command >> line, all works well. >> >> The SCIO source code that I am using is lifted/amended from one of the >> tutorials and is as follows: >> >> ============================================================ >> imagePath = >> "8bit-signed&pixelType=int8&lengths=50,50,3,5,7&axes=X,Y,Z,Channel,Time.fake"; >> System.out.println("Loading image... '" + imagePath + "'"); >> SCIFIO scifio = new SCIFIO(); >> final Reader reader = >> scifio.initializer().initializeReader(imagePath); >> ============================================================ >> >> This source code works file in the SCIFIO tutorial. >> >> Any help gratefully appreciated!!!!! >> >> — Michael Ellis >> >> >> >> >> On 3 Dec 2014, at 19:31, Curtis Rueden <ctrue...@wisc.edu> wrote: >> >>> Hi Michael, >>> >>> > How do I establish what Maven projects I need to include? >>> >>> One way to check is using the dependency-maven-plugin like so: >>> >>> mvn dependency:analyze >>> >>> This will tell you: >>> >>> A) Dependencies you declared but do not actually use; and >>> B) Dependencies you did not declare directly, but actually need. >>> >>> Note that this will only work if your project compiles successfully. In >>> other words, it is easier to start with "too many" dependencies and pare >>> down, rather than trying to "build up" from zero. >>> >>> So in your case, you can start with the ImgLib2 Examples dependencies >>> block, run dependency:analyze, and adjust the POM according to its >>> recommendations. >>> >>> > When I go to my NetBeans project dependence, select Add dependency, >>> > then type SCIF to the query text box, I get a huge list of >>> > possibilities. >>> >>> The dependency you probably want is io.scif:scifio (i.e.: a groupId of >>> io.scif, and an artifactId of scifio). Presumably at the latest version. >>> You can search for that here: >>> >>> http://maven.imagej.net/index.html#nexus-search;gav~io.scif~scifio~~~ >>> >>> So your dependency block in this case would be: >>> >>> <dependency> >>> <groupId>io.scif</groupId> >>> <artifactId>scifio</artifactId> >>> <version>0.17.1</version> >>> </dependency> >>> >>> Note that that block of XML is available for copy-pasting from the link >>> above. >>> >>> > I am completely new to maven >>> >>> For more information, see: >>> http://imagej.net/Maven >>> >>> Regards, >>> Curtis >>> >>> On Tue, Dec 2, 2014 at 6:05 PM, Michael Ellis <michael.el...@dsuk.biz> >>> wrote: >>> I am investigating the using ImgLib2 for a project. >>> >>> I am using NetBeans and have managed to create a NetBeans Mavern project >>> and have added a dependency for ImgLib2 Core Library and that seems to be >>> working OK. >>> >>> I now want to add the least possible requirements for the purpose of >>> opening some image files. >>> >>> How do I establish what Maven projects I need to include? >>> >>> I have cloned the ImgLib2 Examples project and got that working but that >>> seems to include all manner of things that I suspect I do not need. >>> >>> When I go to my NetBeans project dependence, select Add dependency, then >>> type SCIF to the query text box, I get a huge list of possibilities. >>> >>> I am completely new to maven and so do not know what I am doing with it! >>> >>> — Michael Ellis >>> Digital Scientific UK Ltd. >>> >>> >>> >>> >>> _______________________________________________ >>> ImageJ-devel mailing list >>> ImageJ-devel@imagej.net >>> http://imagej.net/mailman/listinfo/imagej-devel >>> >>> >> >> >> _______________________________________________ >> ImageJ-devel mailing list >> ImageJ-devel@imagej.net >> http://imagej.net/mailman/listinfo/imagej-devel >> >> > > > _______________________________________________ > ImageJ-devel mailing list > ImageJ-devel@imagej.net > http://imagej.net/mailman/listinfo/imagej-devel > >
_______________________________________________ ImageJ-devel mailing list ImageJ-devel@imagej.net http://imagej.net/mailman/listinfo/imagej-devel