Stylemanager не может найти ресурсы во внешнем Jar при сборке с помощью oneJar (Ant) - PullRequest
0 голосов
/ 04 февраля 2019

Я столкнулся с проблемой при попытке развернуть мой проект Java.Я сослался на внешний jar как на библиотеку с исходниками и javadoc (controlsfx), но после развертывания на работающем jar я получаю сообщение: com.sun.javafx.css.StyleManager loadStylesheetUnPriviliged Info: не удалось найти таблицу стилей: ",Это таблица стилей CSS для Rangelider, которая хранится в указанном банке по точному пути, указанному в сообщении об ошибке.Из того, что я могу сказать, таблицы стилей доступны где-то внутри конструктора rangelider, что означает, что я не могу реально изменить метод доступа к этим таблицам стилей (вероятно, classloader.getResource ()).Теперь, поскольку я также зависим от нативных библиотек, я использую oneJar для развертывания этого проекта и из того, что я знаю, oneJar использует свой собственный измененный classLoader, я не знаю, имеет ли это какое-либо отношение к нему, так как многиедругие библиотеки, на которые есть ссылки, работают хорошо, и, согласно Саймону Туффсу (https://www.ibm.com/developerworks/library/j-onejar/index.html), метод getResource его загрузчика классов должен работать нормально.

В любом случае, весь класс rangelider работает хорошо, если я экспортирую из Eclipse, но не 't, когда я собираю его с помощью ant в oneJar. Я новичок в написании файлов build.xml. У кого-нибудь есть предложения о том, что можно изменить или попробовать здесь?

Я пробовал разные методы доступа и вручную добавлялтаблица стилей для объекта javafx, но она не примет его.

Я попытался изменить build.xml и убедился, что все библиотеки, на которые есть ссылки, находятся там, где они принадлежат.

Я также попытался экспортироватьот затмения, которое сработало, но не вариант, так как я не хочу проходить через трудности загрузки родной ВесыRies в моем работающем Jar.

Иерархия папок в моей папке oneJar выглядит так:-one-jar -...

Любая помощь будет принята с благодарностью!

<!-- Hook into One-Jar project -->
<available property="one-jar.dir" file="../one-jar/build.onejar.xml" value="../one-jar"/>
<!-- Will be ignored if available above -->
<property name="one-jar.dir" location="one-jar" />
<import file="${one-jar.dir}/build.onejar.xml"/>

<property name="eclipse.jar-in-jar.dir" value="build-lib/eclipse"/>
<property name="temp.dir" value="temp" />   
<path id="libraries">
    <fileset dir="lib" includes="*.jar"/>
</path>

<target name="mkdirs">
    <mkdir dir="${test.results.dir}" />
    <mkdir dir="${test.reports.dir}"/>
    <mkdir dir="classes/src"/>
    <mkdir dir="classes/test"/>
    <mkdir dir="classes/junit"/>
    <mkdir dir="build"/>
    <mkdir dir="build/resources" />
    <copy todir ="build/resources" >
        <fileset dir = "${basedir}/resources" />
    </copy>
</target>

<target name="build" depends="clean, mkdirs, compile, build.DSEConstructionKIT" />

<target name="clean">
    <delete dir="classes" />
</target>

<target name="distclean" depends="clean" description="clean distribution">
    <delete dir="build"/>
    <delete dir="test-reports"/>
    <delete dir="test-results"/>
</target>

<target name="compile" depends="mkdirs">
    <javac includeantruntime="false" destdir="classes/src" includes="**/*.java" debug="true">
        <src path="src" />
        <classpath refid="libraries" />
        <classpath refid="one-jar.libraries"/>
        <classpath path="${one-jar.ant.jar}"/>
    </javac>
    <javac includeantruntime="false" destdir="classes/test" includes="**/*.java" debug="true">
        <src path="test" />
        <classpath refid="libraries" />
        <classpath refid="one-jar.libraries"/>
        <classpath path="${one-jar.ant.jar}"/>
    </javac>
    <javac includeantruntime="false" destdir="classes/junit" includes="**/*.java" debug="true">
        <src path="junit" />
        <classpath refid="libraries" />
        <classpath refid="one-jar.libraries"/>
        <!-- Uses Invoker to set up a JUnit test bridge -->
        <classpath path="classes/test"/>
    </javac>
</target>

<!-- Build the One-Jar -->
<target name="build.DSEConstructionKIT">
    <mkdir dir="build"/>
    <one-jar destfile="build/DSEConstructionKIT.jar">
        <manifest>
            <attribute name="Main-Class" value="com.bosch.dse.zanger.Boot"/>
            <attribute name="One-Jar-Main-Class" value="application.GuiApplication"/>
        </manifest>
        <main>
            <fileset dir="classes/src"/>
        </main>
        <lib>
            <fileset dir="lib" includes="*.jar" />
        </lib>
        <binlib>
            <fileset dir="binlib" includes="*.dll"/>
        </binlib>
    </one-jar>
    <one-jar destfile="build/test-DSEConstructionKIT.jar">
        <manifest>
            <attribute name="Main-Class" value="com.bosch.dse.zanger.Boot"/>
            <attribute name="One-Jar-Main-Class" value="application.GuiApplication"/>
        </manifest>
        <zipfileset src="${one-jar.ant.jar}" includes="**/Testable.class"/>
        <main>
            <fileset dir="classes/test"/>
        </main>
        <lib>
            <fileset dir="lib" includes="*.jar" />
        </lib>
        <binlib>
                <fileset dir="binlib" includes="*.dll"/>
        </binlib>
    </one-jar>
    <delete dir="${temp.dir}" />
</target>

<property name="formatter" value="xml" />

<!-- Test the distribution -->
<target name="junit.report.DSEConstructionKIT" depends="build" description="JUnit test of DSEConstructionKIT">
    <antcall target="junit.DSEConstructionKIT" />
    <antcall target="junit.report"/>   
</target>

<target name="junit.DSEConstructionKIT" depends="build">
    <echo>********** junit-DSEConstructionKIT.jar</echo>
    <junit fork="yes" showoutput="no" printsummary="yes">
        <jvmarg value="-Done-jar.verbose=true" />
        <jvmarg value="-Done-jar.jarname=${basedir}/build/test-DSEConstructionKIT.jar" />
        <classpath>
            <fileset file="${basedir}/build/test-DSEConstructionKIT.jar" />
            <path refid="one-jar.libraries"/>
            <path location="classes/junit" />
        </classpath>

        <!-- Uses Invoker to set up a JUnit test bridge -->
        <test name="com.bosch.dse.zanger.test.DSEConstructionKITSuite" todir="${test.results.dir}" outfile="DSEConstructionKITSuite" />
        <formatter type="${formatter}" usefile="yes" />
    </junit>
</target>

<target name="run.DSEConstructionKIT" depends="build" description="Run a One-Jar DSEConstructionKIT">
    <java fork="true" jar="build/DSEConstructionKIT.jar"/>
</target>

<target name="test.DSEConstructionKIT" depends="build" description="Stand-alone test a One-Jar DSEConstructionKIT">
    <java fork="true" jar="build/test-DSEConstructionKIT.jar"/>
</target>

...