当前位置:   article > 正文

maven整合远程jar包和本地jar包打包部署_manifestentries

manifestentries

1.引入本地jar包的原因

最近在做的项目,需要引入虹远的人脸相关功能,这时候就需要引入他们提供的jar包。但这个时候,去maven仓库上,并没有发现有他们的jar可以引用。因此才有了这个想直接通过本地jar包的方式,直接引入使用。

按理还有一种方式,那就是可以把这个第三方jar包放到我们自己创建的远程仓库上。但因为没有弄这个,并且时间紧急,所以就使用直接引入本地jar包的方式了。

由于线上部署的项目是第三方jar包独立一个文件夹的。因此我们的思路就应该是:maven要把远程的jar包和本地的jar包统一拉到同一个文件夹里。

那这个该如何实现呢?

2.先添加本地依赖

  1. <dependency>
  2. <groupId>arcsoft</groupId>
  3. <artifactId>arcsoft</artifactId>
  4. <version>3.1.1.0</version>
  5. <scope>system</scope>
  6. <systemPath>${project.basedir}/libs/arcsoft-sdk-face-3.1.1.0.jar</systemPath>
  7. </dependency>

这里要注意就是<scope>system</scope>和<systemPath>自己jar包的路径</systemPath>

3.指定本地jar包的编译路径

  1. <plugin>
  2. <groupId>org.apache.maven.plugins</groupId>
  3. <artifactId>maven-compiler-plugin</artifactId>
  4. <configuration>
  5. <source>1.8</source>
  6. <target>1.8</target>
  7. <encoding>UTF-8</encoding>
  8. <compilerArguments>
  9. <extdirs>${project.basedir}/libs</extdirs>
  10. </compilerArguments>
  11. </configuration>
  12. </plugin>

注意 :<extdirs>${project.basedir}/libs</extdirs> 这个就是自己本地jar包的路径

4.指定启动类,将依赖打成外部jar包

  1. <plugin>
  2. <groupId>org.apache.maven.plugins</groupId>
  3. <artifactId>maven-jar-plugin</artifactId>
  4. <configuration>
  5. <archive>
  6. <!-- 生成的jar中,不要包含pom.xml和pom.properties这两个文件 -->
  7. <addMavenDescriptor>false</addMavenDescriptor>
  8. <manifest>
  9. <!-- 是否要把第三方jar加入到类构建路径 -->
  10. <addClasspath>true</addClasspath>
  11. <!-- 外部依赖jar包的最终位置 -->
  12. <classpathPrefix>lib/</classpathPrefix>
  13. <!-- 项目启动类 -->
  14. <mainClass>com.MgcrHelperApplication</mainClass>
  15. </manifest>
  16. <manifestEntries>
  17. <Class-Path>lib/arcsoft-3.1.1.0.jar</Class-Path>
  18. </manifestEntries>
  19. </archive>
  20. </configuration>
  21. </plugin>

这里的关键就是<manifestEntries></manifestEntries>这个属性了,它的作用是把本地jar包添加到MANIFEST.MF文件中去。这里的<Class-Path>里的值,需要和上面依赖的名字一致。

 打包完后,jar包名称为:lib/arcsoft-3.1.1.0.jar。但这里你要注意,我们在引入本地jar包的时候,名字是不一样的。不能写jar包的完整名字。

 

4.1.MANIFEST.MF

该文件存在什么地方呢?

打包完后,我们在jar包里就可以查看到该文件了。

该文件里的具体内容,我们来看看。

 从这里,我们可以看出,如果想要引入本地的jar包。那么<manifestEntries></manifestEntries>这个属性的值,就要和打包远程jar包的值一致。

5.拷贝依赖到jar外面的lib目录

  1. <plugin>
  2. <groupId>org.apache.maven.plugins</groupId>
  3. <artifactId>maven-dependency-plugin</artifactId>
  4. <executions>
  5. <execution>
  6. <id>copy-lib</id>
  7. <phase>package</phase>
  8. <goals>
  9. <goal>copy-dependencies</goal>
  10. </goals>
  11. <configuration>
  12. <outputDirectory>target/lib</outputDirectory>
  13. <excludeTransitive>false</excludeTransitive>
  14. <stripVersion>false</stripVersion>
  15. <includeScope>compile</includeScope>
  16. </configuration>
  17. </execution>
  18. </executions>
  19. </plugin>

 这个配置文件要注意两个地方:<outputDirectory>target/lib</outputDirectory>和<includeScope>compile</includeScope>

  1. 依赖项的作用域
  2. 在定义项目的依赖项的时候,我们可以通过scope来指定该依赖项的作用范围。
  3. scope的取值有compile、runtime、test、provided、system和import。
  4. compile:这是依赖项的默认作用范围,即当没有指定依赖项的scope时默认使用compile。compile范围内的依赖项在所有情况下都是有效的,包括运行、测试和编译时。
  5. runtime:表示该依赖项只有在运行时才是需要的,在编译的时候不需要。这种类型的依赖项将在运行和test的类路径下可以访问。
  6. test:表示该依赖项只对测试时有用,包括测试代码的编译和运行,对于正常的项目运行是没有影响的。
  7. provided:表示该依赖项将由JDK或者运行容器在运行时提供,也就是说由Maven提供的该依赖项我们只有在编译和测试时才会用到,而在运行时将由JDK或者运行容器提供。
  8. system:当scopesystem时,表示该依赖项是我们自己提供的,不需要Maven到仓库里面去找。指定scopesystem需要与另一个属性元素systemPath一起使用,它表示该依赖项在当前系统的位置,使用的是绝对路径。

6.最后,给一下完整的配置

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.apache.maven.plugins</groupId>
  5. <artifactId>maven-compiler-plugin</artifactId>
  6. <configuration>
  7. <source>1.8</source>
  8. <target>1.8</target>
  9. <encoding>UTF-8</encoding>
  10. <compilerArguments>
  11. <extdirs>${project.basedir}/libs</extdirs>
  12. </compilerArguments>
  13. </configuration>
  14. </plugin>
  15. <!-- 指定启动类,将依赖打成外部jar包 -->
  16. <plugin>
  17. <groupId>org.apache.maven.plugins</groupId>
  18. <artifactId>maven-jar-plugin</artifactId>
  19. <configuration>
  20. <archive>
  21. <!-- 生成的jar中,不要包含pom.xml和pom.properties这两个文件 -->
  22. <addMavenDescriptor>false</addMavenDescriptor>
  23. <manifest>
  24. <!-- 是否要把第三方jar加入到类构建路径 -->
  25. <addClasspath>true</addClasspath>
  26. <!-- 外部依赖jar包的最终位置 -->
  27. <classpathPrefix>lib/</classpathPrefix>
  28. <!-- 项目启动类 -->
  29. <mainClass>com.MgcrHelperApplication</mainClass>
  30. </manifest>
  31. <manifestEntries>
  32. <Class-Path>lib/arcsoft-3.1.1.0.jar</Class-Path>
  33. </manifestEntries>
  34. </archive>
  35. </configuration>
  36. </plugin>
  37. <!--拷贝依赖到jar外面的lib目录-->
  38. <plugin>
  39. <groupId>org.apache.maven.plugins</groupId>
  40. <artifactId>maven-dependency-plugin</artifactId>
  41. <executions>
  42. <execution>
  43. <id>copy-lib</id>
  44. <phase>package</phase>
  45. <goals>
  46. <goal>copy-dependencies</goal>
  47. </goals>
  48. <configuration>
  49. <outputDirectory>target/lib</outputDirectory>
  50. <excludeTransitive>false</excludeTransitive>
  51. <stripVersion>false</stripVersion>
  52. <includeScope>compile</includeScope>
  53. </configuration>
  54. </execution>
  55. </executions>
  56. </plugin>
  57. </plugins>
  58. </build>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/308192
推荐阅读
相关标签
  

闽ICP备14008679号