[英]Run an executable JAR with external class path
使用Maven,我将项目编译到一个JAR中,该JAR包含除了一个大依赖项以外的所有依赖项。 依赖关系的包含是使用以下方法完成的:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2.1</version>
<configuration>
<archive>
<manifest>
<mainClass>com.mypackage.Main</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
排除依赖项是通过<scope>provided</scope>
目标myjar.jar
是在同一文件夹中BigExternalJar.jar
,但是当我尝试运行:
java -cp ".:BigExternalJar.jar:myjar.jar" -jar myjar.jar
对于缺少的类,我得到了一个例外(这些类来自BigExternalJar.jar
)。
如何仅使用Maven将依赖项打包到JAR中,但仍然能够在classpath中添加其他JAR? 请注意, BigExternalJar
并不总是位于同一文件夹中,因此我无法将其手动添加到MANIFEST文件中。
有两个类似的问题可能看起来很重复,但是它们无法解决这种情况。 Eclipse:如何使用外部jar构建可执行jar? AND 运行具有外部依赖项的可执行JAR
如果使用-jar
选项,则忽略classpath参数。 仅使用清单中提供的类路径。
<build>
<plugins>
<!-- compiler插件, 设定JDK版本 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>xxx.xxx.yourmain</mainClass>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>
</transformers>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
请尝试一下~~~所有外部罐子都将放在包装好的罐子中
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.