maven
概述
Maven 不需要安装,从官方下载来的只是个压缩包,需要设置环境变量才可以在命令行使用对应命令
编译打包案例
能源采集comm
做项目 showaMeter 时用到了串口开发,使用到 RXTXcomm.jar,完整的 pom.xml 文件内容如下
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xdf</groupId>
<artifactId>showaMeter</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>showaMeter</name>
<description>showaMeter</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.6.13</spring-boot.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 以下是手动添加的依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.43</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.25</version>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.16</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.mybatis-flex</groupId>
<artifactId>mybatis-flex-spring-boot-starter</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>com.cc</groupId>
<artifactId>RXTXcomm</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/RXTXcomm.jar</systemPath>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<!-- 编译器插件:不需要extdirs配置 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- Spring Boot插件:添加includeSystemScope -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>com.xdf.showameter.ShowaMeterApplication</mainClass>
<includeSystemScope>true</includeSystemScope>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<!-- 主要配置:将引用的第三方 jar 包打进生成的 jar 文件的 BOOT-INF/lib 目录中 -->
<!-- <resources>-->
<!-- <resource>-->
<!-- <directory>lib</directory>-->
<!-- <targetPath>BOOT-INF\lib</targetPath>-->
<!-- </resource>-->
<!-- <resource>-->
<!-- <directory>src/main/resources</directory>-->
<!-- </resource>-->
<!-- </resources>-->
</build>
</project>
关键配置
原本 maven-compiler-plugin 的配置如下
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<compilerArguments>
<extdirs>${project.basedir}/lib</extdirs>
</compilerArguments>
</configuration>
</plugin>
后来咨询 deepseek 后把上面的 extdirs 去掉了,使用了 <scope>system</scope> 的依赖 RXTXcomm 在参数 systemPath 的配合下在源码运行时能够找到文件所在路径,但是使用 maven 打包时不会被纳入打包后的 jar 文件(标签 <scope>system</scope> 的原因),就会导致编译后的最终 jar 无法成功启动。在 spring-boot-maven-plugin 的 plugin 中通过使用 <includeSystemScope>true</includeSystemScope> 将外置的依赖 RXTXcomm.jar 重新纳入编译后的 jar 中。此时该依赖在工程根目录下的 lib 下,之前迅达的呼叫中心项目该依赖在 src/main/resources/lib 下,即本项目采用的依赖路径方法不同于迅达的呼叫中心
注意:
将编译后的 jar 部署到服务器上时要将依赖文件 rxtxSerial.dll,rxtxParallel.dll 同时拷贝到 windows 系统目录 C:\Windows\System32 和 C:\Windows\SysWOW64 下
配置文件 settings.xml
在保证魔法可用的情况下使用下面的配置,可正常下载大多数依赖
<settings>
<mirrors>
<mirror>
<id>aliyun-maven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>aliyun-repos</id>
<repositories>
<repository>
<id>aliyun-public</id>
<url>https://maven.aliyun.com/repository/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>aliyun-spring</id>
<url>https://maven.aliyun.com/repository/spring</url>
</repository>
<repository>
<id>aliyun-google</id>
<url>https://maven.aliyun.com/repository/google</url>
</repository>
</repositories>
</profile>
</profiles>
<!-- 激活配置 -->
<activeProfiles>
<activeProfile>aliyun-repos</activeProfile>
</activeProfiles>
</settings>
JSP项目不识别类型
2024年9月在WIN10系统中重新安装 IDEA 2022.3.2 后修改其默认的内置 maven 为自己下载的 maven 会导致从仓库拉下 PADEMIS 项目源码时无法自动识别项目类型,最终无法运行。本次将自定义的外部 maven 的配置文件拷贝到 IDEA 的目录下,其中指定了使用淘宝的镜像,并指定了依赖下载后的存放路径,由此可解决前面的问题
本文件中修改了仓库镜像为淘宝的镜像,将本文件拷贝到 C:\Users\admin\.m2 下,作为 IDEA 集成的 maven 的配置文件。重新下载源码等待自动执行:下载依赖、下载插件、索引文件完毕后在配置项目 File > Project Structure
点我看 完整文件
代理网络
在标签 proxies 中添加下面代码
<proxy>
<id>localclash</id> <!--代理服务器ID,可随意命名-->
<active>true</active> <!-- 是否启用 -->
<protocol>http</protocol> <!-- 通信协议 -->
<username></username> <!-- 代理服务器用户名 -->
<password></password> <!-- 代理服务器密码 -->
<host>127.0.0.1</host> <!-- 代理服务器主机地址 -->
<port>7890</port> <!-- 通信端口 -->
<nonProxyHosts></nonProxyHosts>
</proxy>
下载地址
180阿里云盘:安装程序与软件 -> 开发与实施 -> web开发 -> Maven3.8.1.zip
解压部署
本压缩包解压后得到下面两个目录
其中 apache-maven-localRepository 是本地仓库,之后的依赖 jar 都会下载到改目录中
修改本地仓库地址
编辑配置文件 C:\Maven\apache-maven-3.8.1\conf\settings.xml 如下

<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
设置中央仓库镜像地址为阿里
编辑配置文件 C:\Maven\apache-maven-3.8.1\conf\settings.xml 
设置环境变量
注册环境变量后才能使用:mvn -v 查看版本号,才能将本地 jar 纳入本地仓库中 如果仍然提示没有 maven 的命令,在上面系统环境变量的 path 中添加:%MAVEN_HOME%\bin 记得要重新打开 cmd
把jar导入本地maven库
先通过命令:mvn -v 检测环境变量是否设置成功了(必须先做上面的环境变量注册才能使用 mvn 命令),之后通过命令(将本地 FineReport Jar 纳入本地仓库):
call mvn install:install-file -Dfile=D:\Java\finereport9.0\WebReport\WEB-INF\lib\fr-core-9.0.jar -DgroupId=com.fr -DartifactId=fr-core -Dversion=9.0 -Dpackaging=jar
call mvn install:install-file -Dfile=D:\Java\finereport9.0\WebReport\WEB-INF\lib\fr-report-9.0.jar -DgroupId=com.fr -DartifactId=fr-report -Dversion=9.0 -Dpackaging=jar
call mvn install:install-file -Dfile=D:\Java\finereport9.0\WebReport\WEB-INF\lib\fr-third-9.0.jar -DgroupId=com.fr -DartifactId=fr-third -Dversion=9.0 -Dpackaging=jar
call mvn install:install-file -Dfile=D:\Java\finereport9.0\WebReport\WEB-INF\lib\fr-performance-9.0.jar -DgroupId=com.fr -DartifactId=fr-performance -Dversion=9.0 -Dpackaging=jar
call mvn install:install-file -Dfile=D:\Java\finereport9.0\WebReport\WEB-INF\lib\fr-platform-9.0.jar -DgroupId=com.fr -DartifactId=fr-platform -Dversion=9.0 -Dpackaging=jar
call mvn install:install-file -Dfile=D:\Java\finereport9.0\WebReport\WEB-INF\lib\fr-chart-9.0.jar -DgroupId=com.fr -DartifactId=fr-chart -Dversion=9.0 -Dpackaging=jar
call mvn install:install-file -Dfile=D:\Java\finereport9.0\WebReport\WEB-INF\lib\fr-datasource-9.0.jar -DgroupId=com.fr -DartifactId=fr-datasource -Dversion=9.0 -Dpackaging=jar
call mvn install:install-file -Dfile=D:\Java\finereport9.0\WebReport\WEB-INF\lib\fr-designer-chart-9.0.jar -DgroupId=com.fr -DartifactId=fr-designer-chart -Dversion=9.0 -Dpackaging=jar
call mvn install:install-file -Dfile=D:\Java\finereport9.0\WebReport\WEB-INF\lib\fr-designer-core-9.0.jar -DgroupId=com.fr -DartifactId=fr-designer-core -Dversion=9.0 -Dpackaging=jar
call mvn install:install-file -Dfile=D:\Java\finereport9.0\WebReport\WEB-INF\lib\fr-designer-report-9.0.jar -DgroupId=com.fr -DartifactId=fr-designer-report -Dversion=9.0 -Dpackaging=jar
将本地 jar 导入本地 maven 库中,可以看到 -Dfile 后面是 jar 文件所在的绝对路径
jdk.internal.org.objectweb.asm.commons不存在
2020年8月29日 10:04:43 在IDEA中使用 maven 打包 jar 文件报错:程序包jdk.internal.org.objectweb.asm.commons不存在,如下图
需要添加下面的插件
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<compilerArguments>
<verbose />
<!--
将jdk的依赖jar打入项目中,这样项目中使用的jdk的依赖就尅正常使用
注意 win 是英文分号间隔,linux 是英文冒号
-->
<bootclasspath>${java.home}/lib/rt.jar;${java.home}/lib/jce.jar;${java.home}/lib/jsse.jar</bootclasspath>
</compilerArguments>
</configuration>
</plugin>
