• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Maven - budowanie .jar z wielu modułów

Aruba Cloud - Virtual Private Server VPS
–1 głos
430 wizyt
pytanie zadane 3 lipca 2018 w Java przez Andrew Obywatel (1,420 p.)

Witam, chciałem zrobić sobie multimodułowy projekt Maven. W środowisku wszystko działa pięknie ale mam problem ze zbudowaniem pliku .jar. Nie wiem jak ustawić, żeby Maven spakował mi wraz z projektem aplikacji projekt biblioteki.

Moja konfiguracja

TestApp
- pom.xml
- App
  - pom.xml
- Library
  - pom.xml

W App jest klasa z Main'em i ten moduł zależy od Library.

Po instalacji maven wyluwa mi dwie jarki (jedną od app a drugą od biblioteki) a ja chciałbym jedną ;c
Po uruchomieniu app.jar

Exception in thread "main" java.lang.NoClassDefFoundError: com/test/library/LibLocalService
        at com.test.app.Main.main(Main.java:8)
Caused by: java.lang.ClassNotFoundException: com.test.library.LibLocalService
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 1 more

pom.xml modułu App

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <parent>
        <artifactId>firstapp</artifactId>
        <groupId>com.test</groupId>
        <version>0.1</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>app</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.test</groupId>
            <artifactId>library</artifactId>
            <version>0.1</version>
        </dependency>
    </dependencies>

</project>

pom.xml modułu Library

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <parent>
        <artifactId>firstapp</artifactId>
        <groupId>com.test</groupId>
        <version>0.1</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>library</artifactId>


</project>

pom.xml "główny"

<?xml version="1.0" encoding="UTF-8"?>
<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>
    <name>FirstApp</name>
    <groupId>com.test</groupId>
    <artifactId>firstapp</artifactId>
    <packaging>pom</packaging>
    <version>0.1</version>

    <modules>
        <module>library</module>
        <module>app</module>
    </modules>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>com.test.app.Main</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>




 

1 odpowiedź

0 głosów
odpowiedź 3 lipca 2018 przez Andrew Obywatel (1,420 p.)

Znalazłem jakieś dziwne rozwiązanie gdyby ktoś szukał i działa :)

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <filters>
                    <filter>
                        <artifact>*:*</artifact>
                        <excludes>
                            <exclude>META-INF/*.SF</exclude>
                            <exclude>META-INF/*.RSA</exclude>
                            <exclude>META-INF/*.INF</exclude>
                        </excludes>
                    </filter>
                </filters>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <manifestEntries>
                            <Main-Class>com.test.app.Main</Main-Class>
                            <Class-Path>.</Class-Path>
                        </manifestEntries>
                    </transformer>
                </transformers>
                <shadedArtifactAttached>true</shadedArtifactAttached>
                <shadedClassifierName>fat</shadedClassifierName>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
komentarz 3 lipca 2018 przez Wiciorny Ekspert (280,450 p.)
fajnie, że czegoś używasz... ale rozumiesz dlaczego teraz   to działa?  Tu jest wazne żebyś to zrozumiał a nie " dobra tera działa jade dalej"

Podobne pytania

0 głosów
0 odpowiedzi 624 wizyt
pytanie zadane 8 marca 2017 w Java przez Jonki Dyskutant (8,180 p.)
0 głosów
2 odpowiedzi 263 wizyt
pytanie zadane 16 stycznia 2020 w Java przez Curiosis Użytkownik (540 p.)
0 głosów
2 odpowiedzi 325 wizyt
pytanie zadane 4 czerwca 2019 w Java przez krystian1997 Obywatel (1,020 p.)

93,335 zapytań

142,331 odpowiedzi

322,415 komentarzy

62,670 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...