Попытка получить файл свойств из файла JAR в другом файле JAR - PullRequest
2 голосов
/ 06 августа 2011

У меня есть исполняемый файл jar (A.jar), созданный с помощью Eclipse, который опирается на другие файлы jar (B.jar), которые включены в файл jar и доступны через jarinjarloader.Хотя это работает для доступа к коду java внутри этих jar-файлов, когда этот код вызывает

InputStream inStream = <Class>.getClassLoader().getResourceAsStream(propFile);

, он не может найти файл свойств, содержащийся в B.jar.Код работает при запуске в Eclipse, поэтому я знаю, что есть правильные файлы свойств.

Я попытался извлечь A.jar, затем извлечь B.jar, а затем сжать объединенные файлы, но это не работает,Если посмотреть на файл Manifest, то основным классом является org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader

Могу ли я внести некоторые изменения в файл Manifest (скажем, добавить что-то в Rsrc-Class-Path) что заставит это работать?Rsrc-Class-Path уже содержит «./», но это явно не позволяет загрузчику свойств видеть мои файлы свойств.

TIA,

Greg

Ответы [ 2 ]

2 голосов
/ 06 августа 2011

Я бы также рекомендовал работать с вложенными банками.Я обычно просто делаю это в своем build.xml, чтобы собрать один jar со всеми распакованными в него библиотеками:

<target name="fatjar" depends="compile">
    <jar destfile="${isamjar}" filesetmanifest="mergewithoutmain">
            <manifest>
                    <attribute name="Main-Class" value="com.xyz.Main"/>
                    <attribute name="Class-Path" value="."/>
            </manifest>
            <fileset dir="./bin"/>
            <fileset dir="." includes="src/**"/>
            <zipfileset excludes="META-INF/*.SF" src="${l}/derby.jar"/>
            <zipfileset excludes="META-INF/*.SF" src="${l}/jconn3.jar"/>
            <zipfileset excludes="META-INF/*.SF" src="${l}/log4j-1.2.9.jar"/>
            <zipfileset excludes="META-INF/*.SF" src="${l}/${jar4j}"/>
    </jar>

1 голос
/ 17 августа 2011

Оказывается, в Eclipse есть настройка, которую я пропустил. При экспорте a " запускаемого файла JAR " вы можете выбрать " Извлечь необходимые библиотеки в сгенерированный JAR ". хотя это может привести к некоторым проблемам с лицензией (в зависимости от JAR-файлов, которые вы объединяете), в моем случае это сработало как шарм, давая мне один (меньше), поскольку среди различных jar-файлов было много дубликатов был в том числе) баночка, которая действительно сработала.

...