Budowa paczki Jar

0

Cześć
Może to banalne, ale chciałem zapytać jak zrobic aby polecenie mvn clean install budowalo paczke JAR ktorą będzie sie dalo od razu uruchomic (jakis testowy main w ktoym bedzie np: Sysout(dzisiaj piątek :d)).
Używam Intellija.

0

A masz już testowy kod napisany? (Sysout(dzisiaj piątek :d))? bo jak masz dobrze skonfigurowanego mavena (plik pom.xml) to mvn clean install powinno zbudować jara. Będzie on lokalnie folderze projektu, oraz poinien też być folderze z ściągniętymi jarami (folder zaczynający się normalnie od .m2)

3

Żeby jar się odpala musisz miec ustawiony mainClass w manifeście. W mavenie robi się to tak:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <archive>
            <manifest>
                <mainClass>
                    com.baeldung.executable.ExecutableMavenJar
                </mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>

źródło: https://www.baeldung.com/executable-jar-with-maven

5

Jeśli mamy jakieś dodatkowe zależności (inne biblioteki) to trzeba zbudować tzw fat jar, np przez maven assembly plugin.

1
Aleksander32 napisał(a):

Jeśli mamy jakieś dodatkowe zależności (inne biblioteki) to trzeba zbudować tzw fat jar, np przez maven assembly plugin.

Dokładnie. A co do komendy mavena, to można pominąć testy integracyjne i zbudować jara poleceniem mvn clean package - wtedy nowy jar będzie w folderze target w katalogu projektowym

1

Alternatywą dla maven-assembly-plugin jest maven-shade-plugin.

0

Dzięki za odzew. Staram się to zrobić. Tym razem pojawia się błąd przy poleceniu mvn clean install dostaję "java.io.FileNotFoundException: C:\Users\Alienware\IdeaProjects\zadanie\target\jacoco.exec (Nie mozna odnalezc okreslonego pliku)".
Plik jacoco.exec nie generuje się w folderze target.
Czy ktoś mógłby wskazać gdzie nanieść poprawkę??
Poniżej wrzucam plik pom.xml




<?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>

    <groupId>org.example</groupId>
    <artifactId>zadanie</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.12.3</version>
        </dependency>

        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.6.2</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.junit.vintage</groupId>
            <artifactId>junit-vintage-engine</artifactId>
            <version>5.7.0</version>
        </dependency>

        <dependency>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.8.7</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.0.0-M5</version>
            </plugin>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.5.10.201208310627</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <!-- attached to Maven test phase -->
                    <execution>
                        <id>jacoco-site</id>
                        <phase>test</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <!-- Build an executable JAR -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>task.Main</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
4

wywal jacoco-maven-plugin? :D Tak to jest jak ktoś kopiuje losowe kody z internetu. Nie wiem czemu oczekujesz ze jakieś jacoco.exe ci się wygeneruje. Jacoco to jest tool do mierzenia pokrycia testami aplikacji. Dodałeś plugin który w trakcie budowania aplikacji pusci testy i sprawdzi code coverage.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.