Как создать автономное приложение с неповрежденными зависимостями с помощью Maven?
У меня есть настольное Java-приложение, созданное с использованием Maven 2 (но я могу перейти на Maven 3, если это поможет) с рядом зависимостей с открытым исходным кодом. Сейчас я пытаюсь упаковать его как автономный, чтобы сделать его доступным для конечных пользователей без необходимости установки maven или чего-либо еще.
Я успешно использовал maven-assembly-plugin для создания одного jar-файла, содержащего все зависимости, но это не совсем то, чего я хочу, потому что при использовании библиотек LGPL вы должны распространять библиотеки, которые вы используете, как отдельные jar-файлы.
Я хочу, чтобы Maven создал почтовый индекс, содержащий банку с моим кодом иMANIFEST.MF
это относится к другим банкам, которые мне нужны вместе с другими банками. Это похоже на стандартную практику, но я не вижу, как это сделать.
Вот выдержка из моего пом
<code> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <encoding>UTF-8</encoding> <compilerVersion>1.6</compilerVersion> <source>1.6</source> <target>1.6</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <argLine>-Dfile.encoding=UTF-8</argLine> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.4</version> <configuration> <archive> <manifest> <mainClass>com.company.widget.Main</mainClass> <packageName>com.company.widget</packageName> <addClasspath>true</addClasspath> </manifest> </archive> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.3</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>com.company.widget.Main</mainClass> <packageName>com.company.widget</packageName> <addClasspath>true</addClasspath> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </code>
РЕДАКТИРОВАТЬ: взято на идею Kals
создал файл с именем descriptor.xml
<code><?xml version="1.0" encoding="UTF-8"?> <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>distribution</id> <formats> <format>zip</format> </formats> <dependencySets> <dependencySet> <scope>runtime</scope> <outputDirectory>lib</outputDirectory> <unpack>false</unpack> </dependencySet> </dependencySets> </assembly> </code>
а пом содержит:
<code><plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.3</version> <configuration> <descriptors> <descriptor>assembly.xml</descriptor> </descriptors> <archive> <manifest> <mainClass>com.company.widget.cmdline.Main</mainClass> <packageName>com.company.widget</packageName> <addClasspath>true</addClasspath> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </code>
Теперь поддерживает jar и помещает их в папку lib, включая мой собственный код