我已经打包了我的mvn项目。
之后,我的jar
文件只包含我手工编写的类:
META-INF/
META-INF/MANIFEST.MF
me/
me/jeusdi/
me/jeusdi/slab/
me/jeusdi/slab/MyService.class
me/jeusdi/slab/App.class
me/jeusdi/slab/MyConfig.class
me/jeusdi/slab/MyServiceImpl.class
META-INF/maven/
META-INF/maven/me.jeusdi.slab/
META-INF/maven/me.jeusdi.slab/slab/
META-INF/maven/me.jeusdi.slab/slab/pom.xml
META-INF/maven/me.jeusdi.slab/slab/pom.properties
不过,我需要声明的maven依赖项:
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>me.jeusdi.slab</groupId>
<artifactId>slab</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>slab</name>
<url>http://maven.apache.org</url>
<properties>
<kafka.streams.version>3.4.0</kafka.streams.version>
<spring.version>6.0.5</spring.version>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-streams</artifactId>
<version>${kafka.streams.version}</version>
</dependency>
<!-- Spring Core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Spring Context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.10.1</version>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
为什么spring-core
依赖项没有出现在我的jar中。
我需要运行我的jar。当前,我正在使用:
java -cp target/slab-1.0-SNAPSHOT.jar App
关于如何嵌入或定位依赖项并运行应用程序,您有什么想法吗?
2条答案
按热度按时间jmo0nnb31#
您可以使用Maven创建一个包含所有类的uber-jar,也可以让Maven下载您的依赖项。
我通常做的是和你一样生成jar,然后自动将所有依赖项下载到lib文件夹中。为了使运行jar像
java -jar ...
一样简单,我甚至让Maven将类路径添加到清单中。唯一的缺点是,现在需要将jar和它的库完全分布在这个目录结构中。优点是,任何签名的jar都将保留它。S的签名并因此确定有效性。f3temu5u2#
如果要包含具有依赖关系的jar,可以添加以下内容
只需将
<mainClass>fully.qualified.MainClass</mainClass>
中完全限定的. MainClass替换为具有main的任何类即可要构建它,可以运行
mvn clean compile assembly:single
有关详细信息,请参见https://stackoverflow.com/a/574650/5622596。
至于如何运行jar,一种可能的方法是运行下面的
java -jar NameOfJar.jar
,只需将NameOfJar.jar
替换为您创建的任何jar即可