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.
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
)
Ż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>
Jeśli mamy jakieś dodatkowe zależności (inne biblioteki) to trzeba zbudować tzw fat jar, np przez maven assembly plugin.
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
Alternatywą dla maven-assembly-plugin
jest maven-shade-plugin
.
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>
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.