在使用 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 中,还请另行百度)