Bog*_*dan 17 java pom.xml maven
我想将它打包在一个可执行的jar中以便分发.我需要一个像main.jar这样的可执行文件,并且所有依赖项都在libs/*.jar中
如何在没有预先包含到依赖库的情况下制作maven可执行jar?
在如何使用Maven创建具有依赖关系的可执行JAR?2010年12月1日10:46安德烈·阿隆森回答了一个注释,但是那个根本不起作用(失败的sadescriptorRef未设置).
Raf*_*ski 13
我更喜欢这个有点修改的解决方案.创建具有类路径集的可执行jar,并将所有依赖项复制到给定目录.
您不需要任何其他文件.
在安装阶段正在复制依赖项.
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>fully.qualified.MainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<!-- optional -->
<!-- exclude copying test and provided dependencies -->
<includeScope>runtime</includeScope>
<excludeScope>provided</excludeScope>
<!-- optional -->
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud)
我更新了答案,只复制运行时依赖项,如此处所述- 复制正确的依赖项.排除测试和提供的依赖项.
事实证明,如果要从测试范围和提供的范围中排除依赖关系,则需要排除提供的范围并包括运行时范围.
Rag*_*ram 11
你可以在一定程度上实现这一目标.
首先,您可以通过适当地配置maven jar插件来创建可执行jar.
然后,您将使用maven程序集插件创建一个jar-with-dependencies,不包括您的项目jar.为此,您将创建一个描述符文件,例如src/main/assembly/descriptor.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>/</outputDirectory>
<useProjectArtifact>false</useProjectArtifact>
<unpack>true</unpack>
<scope>runtime</scope>
</dependencySet>
</dependencySets>
</assembly>
Run Code Online (Sandbox Code Playgroud)
像这样在你的项目中使用它.
<project>
[...]
<build>
[...]
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2.1</version>
<configuration>
<descriptors>
<descriptor>src/main/assembly/descriptor.xml</descriptor>
</descriptors>
</configuration>
[...]
</plugin>
</plugins>
</build>
</project>
Run Code Online (Sandbox Code Playgroud)
最终会得到两个罐子 - 一个是由项目创建的可执行jar,另一个是由程序集插件创建的jar-with-dependencies.
归档时间: |
|
查看次数: |
19013 次 |
最近记录: |