Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java tools & IDE's > Добавить в classpath Jar из Jar-а


Автор: v2v 18.3.2010, 21:39
Есть jar (А) внутри которого лежит папка lib с другим джарником (В).
A.jar
./lib
./lib/B.jar
1. Если просто подключить внутренний джарник (В) через maven dependencies , то все классы находятся и проект собирается.
2. Если классы из джарника (В) развернуть , потом завернуть в джарник (А),  то все классы находятся и проект собирается.
3. Но если вложить джарник (В) в джарник (А), то не находит классы из внутрненнего джарника не находятся и проект не собирается.

Что то надо прописать в манифесте джарника А? Или как то по умному указать его в dependencies? 

Предпочтительней второй вариант, потому что джарник А собирается с помощью maven bundle plugin для OSGi, но он должен работать и в "стенделон" режиме.. покрайне мере работает если не заварачивать джар в джар (см. 2).

Автор: intr 19.3.2010, 03:18
Немного сумбурно, но если я правильно понял, то надо собрать JAR-архив со всеми зависимостями. 

К сожалению JAR внутри другого JAR не работает, потому надо распаковывать классы из нужных JAR-архивов, и потом запаковывать их в основной JAR-архив, вместе с классами приложения.

Для Maven есть два основных способа это сделать:
1. Использовать Maven assembly - http://maven.apache.org/plugins/maven-assembly-plugin/
2. Использовать Maven shade - http://maven.apache.org/plugins/maven-shade-plugin/

То есть зависимости в Maven от библиотек указываются как обычно, и дополнительно настраиваются один из вышеприведенных плагинов для сборки итогового JAR-архива. Я предпочитаю второй способ.

Автор: RageSteel 19.3.2010, 07:11
У меня вполне успешно работает jar внутри jar, собранный с помощью maven assembly plugin.

Конфигурация в pom.xml:
Код

            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <descriptors>
                        <descriptor>src/main/assembly/dist.xml</descriptor>
                    </descriptors>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>


Описатель dist.xml:
Код

<assembly
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
    <id>jar-with-dependencies</id>
    <formats>
        <format>jar</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <dependencySets>
        <dependencySet>
            <outputDirectory>/lib</outputDirectory>
            <unpack>false</unpack>
            <scope>runtime</scope>
        </dependencySet>
    </dependencySets>
    <fileSets>
        <fileSet>
            <directory>${project.build.outputDirectory}</directory>
            <outputDirectory>/</outputDirectory>
        </fileSet>
    </fileSets>
</assembly>

Автор: v2v 19.3.2010, 12:51
Нет, мне не надо собирать итоговый джарник. Собранный  джарки вообще то будут лежать отдельно.
Мне всего то надо через мавен подключить свои джарки (с джарками) как депенденси и пройти тесты проекта.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)