你不能只在你的jar中包含第三方jar。清單中的類路徑相對於您正在運行的jar。
例如,如果你有my-application.jar
這取決於my-utils.jar
而且都在同一目錄下,你的清單類路徑將是:
Class-Path: my-utils.jar
而如果你只是my-utils.jar
移動到lib
目錄給我這種佈局:
+ my-application.jar
+ lib
+ my-utils.jar
你的清單類路徑將是:
Class-Path: lib/my-utils.jar
現在你的問題。
首先,你應該真的把所有的庫存放到一個倉庫中。 Maven是建立在一個存儲庫上工作的,並且違背'Maven方式'往往會導致問題。
替代(我不推薦)是system
範圍,它允許你指定一個路徑,例如申報依賴性:
<dependency>
<groupId>com.mycompany</groupId>
<artifactId>my-utils</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>lib/my-utils.jar</systemPath>
</dependency>
然而,小心翼翼地使用它。 system
範圍旨在用於系統JAR,通常是JVM中的系統JAR。將它與其他任何東西一起使用實際上是對此功能的濫用,並可能影響您構建的可移植性。
一旦你有你的依賴直,你需要打包你的應用程序。正如我所提到的,在應用程序jar中包含依賴關係jar將無法工作。我通常使用允許我創建zip的Assembly Plugin,該zip可以簡單地解壓縮以安裝應用程序。
從一個簡單的描述符Assembly Plugin的作品,你的情況,你要包括你的應用程序的jar加上依賴罐子,看起來像這樣:
<?xml version="1.0"?>
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"
>
<id>${project.name}</id>
<formats>
<format>zip</format>
<format>dir</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySet>
<outputDirectory>lib</outputDirectory>
<useProjectArtifact>true</useProjectArtifact>
<includes>
<include>${artifact.groupId}:${artifact.artifactId}</include>
</includes>
</dependencySet>
<dependencySet>
<outputDirectory>lib</outputDirectory>
<useProjectArtifact>false</useProjectArtifact>
</dependencySet>
</assembly>
(您可能需要與include
打一點)
您還可以包含腳本來運行您的應用程序和程序集中所需的屬性。