在使用 maven 項目開發時,避免不了使用外部 jar 包,公司沒有 maven 私服,小編推薦使用下面方式
小編將網上的零零散散的教程整合了下
用於解決引入外部jar包,在pom.xml配置文件中配置即可
1.將jar包放到項目的指定文件夾下,小編放到 main 的目錄下,如下圖
2.在 maven 配置文件中配置 lib 文件夾路徑,方便引用里面的 jar 文件(此步驟可省略,如果引用的jar包太多,建議加上此步驟)
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <resource.path>${project.basedir}/src/main/resources</resource.path> <base.lib.path>${project.basedir}/src/main/lib</base.lib.path> </properties>
3. 在 dependencies 節點下配置需要引用的 jar,如下圖(如果有多個,就都配置上即可)
由於maven打包時候會將 artifactId 和 version 用 - 拼接作為 jar 包名稱,所以需要遵守下面的配置規則
<dependency> <groupId>bx05.message</groupId><!--隨意,也別太隨意--> <artifactId>bx05.message</artifactId><!--需要和下面systemPath中的名稱一致--> <version>0.5.0-SNAPSHOT</version><!--需要和systemPaht中的版本一致--> <scope>system</scope> <!--system 需要顯式提供依賴的jar以后,maven就不會在repository中查找它--> <systemPath>${base.lib.path}/bx05.message-0.5.0-SNAPSHOT.jar</systemPath> <!--jar包具體位置--> </dependency>
4.需要配置 maven 打包時將本地 jar 一起打入 lib 中
<!-- 將所依賴的第三方jar包打入target下的lib目錄 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>2.5</version> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${base.lib.path}</outputDirectory> <outputDirectory>${project.build.directory}/lib</outputDirectory> </configuration> </execution> </executions> </plugin>
5.配置 maven 打 jar 時修改清單文件,將本地 jar 寫到 MANIFEST.MF 文件中,這樣運行打包好的 jar 時就不會包找不到類的異常了(注意,多個 jar 的話,需要用空格隔開)
<!-- 打jar包的main方法配置 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <mainClass>com.beyond.AutonaviApplication</mainClass> </manifest> <!-- 給清單文件添加鍵值對(配置文件外置) --> <manifestEntries> <Class-Path>config/ lib/bx05-0.5.0-SNAPSHOT.jar lib/bx05.message-0.5.0-SNAPSHOT.jar</Class-Path> </manifestEntries> </archive> <!--打包的時候忽略classes 路徑下的配置文件 --> <excludes> <exclude>*.properties</exclude> <exclude>*.xml</exclude> <exclude>*.txt</exclude> <exclude>templates/**</exclude> </excludes> </configuration> </plugin>
下圖為打好包的 MANIFEST.MF 文件內容
小編的項目打包方式是源碼和 jar 包分離的方式,如下圖(如果使用的是將 lib 下的 jar 全部打入 執行 jar 中,還請另行百度)