Re: openjfx usage in megan-ce
Andreas Tille <andreas@an3as.eu> writes:
> Hi Felix,
Hello Andreas!
> On Sat, May 20, 2017 at 04:23:31PM +0200, Felix Natter wrote:
>> > I had a first packaging centric look on megan-ce[1]. While there
>> > are several problems I stumbled upon several compile errors like
>>
>> I cannot currently build this because my libjloda-java is at 0.0+20161018.
>
> It is in experimental due to freeze policy.
Ok, pulled it, thanks.
>> > [javac] /build/megan-ce-0.0+20170515/antbuild/src/megan/blastclient/BlastProgram.java:28: error: package javafx.geometry does not exist
>> > [javac] import javafx.geometry.Insets;
>> > [javac] ^
>> > [javac] /build/megan-ce-0.0+20170515/antbuild/src/megan/blastclient/BlastProgram.java:29: error: package javafx.scene does not exist
>> > [javac] import javafx.scene.Scene;
>> > [javac] ^
>> > [javac] /build/megan-ce-0.0+20170515/antbuild/src/megan/blastclient/BlastProgram.java:30: error: package javafx.scene.control does not exist
>> > [javac] import javafx.scene.control.*;
>> > [javac] ^
>> > [javac] /build/megan-ce-0.0+20170515/antbuild/src/megan/blastclient/BlastProgram.java:31: error: package javafx.scene.layout does not exist
>> > [javac] import javafx.scene.layout.BorderPane;
>> > [javac] ^
>> > [javac] /build/megan-ce-0.0+20170515/antbuild/src/megan/blastclient/BlastProgram.java:32: error: package javafx.scene.layout does not exist
>> > [javac] import javafx.scene.layout.HBox;
>> > [javac] ^
>> >
>> > To solve this I added libopenjfx-java Build-Dependency but this does not
>> > seem to help. Any idea how I could fix this?
>>
>> You have put the wrong openjfx jar into debian/manifest:
>>
>> $ jar tf /usr/share/java/openjfx/lib/javafx-mx.jar | grep javafx.geometry
>> <no output>
>>
>> $ jar tf /usr/share/java/openjfx/jre/lib/ext/jfxrt.jar | grep javafx.geometry
>> [...]
>> javafx/geometry/Insets.class
>> [...]
>
> Sounds convincing. :-)
>
>> This simple patch should work:
>>
>> diff --git a/debian/manifest b/debian/manifest
>> index 9b9c713..5b60c58 100644
>> --- a/debian/manifest
>> +++ b/debian/manifest
>> @@ -1,3 +1,3 @@
>> /usr/share/java/megan-ce.jar:
>> Main-Class: megan-ce.MeganRun
>> - Class-Path: /usr/share/java/jloda.jar /usr/share/java/colt.jar /usr/share/java/commons-math3.jar /usr/share/java/gson.jar /usr/share/java/openjfx/lib/javafx-mx.jar
>> + Class-Path: /usr/share/java/jloda.jar /usr/share/java/colt.jar /usr/share/java/commons-math3.jar /usr/share/java/gson.jar /usr/share/java/openjfx/jre/lib/ext/jfxrt.jar
It seems the CLASS_PATH in debian/rules is not used during build, we
need to patch "build.classpath" in antbuild/build.xml, like this (last
patch):
--- a/antbuild/build.xml
+++ b/antbuild/build.xml
@@ -21,7 +21,10 @@
<path id="build.classpath">
<fileset dir="/usr/share/java/" includes="jloda.jar"/>
-
+ <fileset dir="/usr/share/java/" includes="colt.jar"/>
+ <fileset dir="/usr/share/java/" includes="commons-math3.jar"/>
+ <fileset dir="/usr/share/java/" includes="gson.jar"/>
+ <fileset dir="/usr/share/java/openjfx/jre/lib/ext" includes="jfxrt.jar"/>
</path>
<!-- init -->
(or, as an alternative, succeed in making build.xml use CLASS_PATH)
Note that you need to include all these libraries in debian/manifest
too, otherwise the program will fail during runtime (which might not be
noticed until a particular functionality is used).
> I've just pushed
> As I said this is in experimental. I also noticed that there is not
> only trouble with javafx:
>
> ...
> [javac] /build/megan-ce-0.0+20170515/antbuild/src/megan/biom/BiomData.java:21: error: package com.google.gson does not exist
> [javac] import com.google.gson.Gson;
> [javac] ^
> [javac] /build/megan-ce-0.0+20170515/antbuild/src/megan/blastclient/BlastProgram.java:22: error: package javafx.application does not exist
> [javac] import javafx.application.Application;
> [javac] ^
> [javac] /build/megan-ce-0.0+20170515/antbuild/src/megan/blastclient/BlastProgram.java:23: error: package javafx.beans.value does not exist
> [javac] import javafx.beans.value.ChangeListener;
> ...
>
> So Gson is also not found. :-(
gson and javax are found, now that we change the correct classpath, but
several other libraries are used:
build1.log:53: [javac] import malt.align.SimpleAligner4DNA;
build1.log:56: [javac] import malt.util.MurmurHash3;
--> there is only 'smalt' in Debian?
build1.log:59: [javac] import Jama.EigenvalueDecomposition;
build1.log:62: [javac] import Jama.Matrix;
build1.log:70: [javac] import Jama.EigenvalueDecomposition;
build1.log:73: [javac] import Jama.Matrix;
build1.log:76: [javac] import Jama.Matrix;
--> libjama-java / /usr/share/java/jama.jar
build1.log:94: [javac] import com.install4j.api.launcher.ApplicationLauncher;
build1.log:97: [javac] import com.install4j.api.update.ApplicationDisplayMode;
build1.log:100: [javac] import com.install4j.api.update.UpdateChecker;
build1.log:103: [javac] import com.install4j.api.update.UpdateDescriptor;
build1.log:106: [javac] import com.install4j.api.update.UpdateDescriptorEntry;
--> probably not in Debian?
build1.log:109: [javac] import org.controlsfx.control.Notifications;
build1.log:112: [javac] import org.controlsfx.control.spreadsheet.SpreadsheetColumn;
build1.log:115: [javac] import org.controlsfx.control.spreadsheet.SpreadsheetView;
build1.log:144: [javac] import org.controlsfx.control.spreadsheet.GridBase;
build1.log:147: [javac] import org.controlsfx.control.spreadsheet.SpreadsheetCell;
build1.log:150: [javac] import org.controlsfx.control.spreadsheet.SpreadsheetCellType;
build1.log:168: [javac] import org.controlsfx.control.spreadsheet.*;
build1.log:181: [javac] import org.controlsfx.control.spreadsheet.SpreadsheetColumn;
build1.log:184: [javac] import org.controlsfx.control.spreadsheet.SpreadsheetColumn;
--> ?
build1.log:138: [javac] import contrasts.Contrasts;
--> ?
build1.log:141: [javac] import org.apache.commons.codec.binary.Base64;
--> libcommons-codec-java / /usr/share/java/commons-codec.jar
build1.log:190: [javac] import org.springframework.http.HttpEntity;
build1.log:193: [javac] import org.springframework.http.HttpHeaders;
build1.log:196: [javac] import org.springframework.http.HttpMethod;
build1.log:199: [javac] import org.springframework.http.ResponseEntity;
build1.log:202: [javac] import org.springframework.web.client.RestTemplate;
libspring-web-java / /usr/share/java/spring3-web.jar
Cheers and Best Regards,
--
Felix Natter
Reply to: