maven 打包项目成war报错

本文介绍了在构建Maven项目时遇到的WarMojo插件注入错误及其解决办法。通过在pom.xml文件中正确配置maven-war-plugin版本,可以避免初始化错误并成功打包WAR文件。

 主要报错信息:

[WARNING] Error injecting: org.apache.maven.plugin.war.WarMojo
com.google.inject.ProvisionException: Unable to provision, see the following errors:

1) Error injecting constructor, java.lang.ExceptionInInitializerError: Cannot access defaults field of Properties
  at org.apache.maven.plugin.war.WarMojo.<init>(Unknown Source)
  while locating org.apache.maven.plugin.war.WarMojo

1 error

参考链接:https://maven.apache.org/plugins/maven-war-plugin/plugin-info.html

在pom.xml里,<project> </project>中添加如下插件

<build>
    <!-- To define the plugin version in your parent POM -->
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.3.1</version>
        </plugin>
      </plugins>
    </pluginManagement>
    <!-- To use the plugin goals in your POM or parent POM -->
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.3.1</version>
      </plugin>
    </plugins>
</build>

在使用 Maven 构建 Java 项目并通过 `-jar` 选项运行时遇到错误,可能涉及多个方面的问题,包括构建配置、依赖管理、JAR 文件结构以及 Java 环境设置等。以下是常见的排查方向及解决方案: ### 1. 确保构建的 JAR 文件包含主类信息 若运行时提示 `no main manifest attribute`,则说明 JAR 文件的 `MANIFEST.MF` 中未指定主类。需在 `pom.xml` 中配置 `maven-jar-plugin` 插件,明确指定主类: ```xml <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>com.example.Main</mainClass> </manifest> </archive> </configuration> </plugin> ``` 运行 `mvn clean package` 后生的 JAR 文件将包含正确的主类声明,从而支持通过 `java -jar your-app.jar` 启动[^3]。 ### 2. 检查依赖是否完整打包 如果构建的 JAR 文件缺少运行时所需的依赖库,可能导致类加载失败。使用 `maven-assembly-plugin` 或 `maven-shade-plugin` 可以将所有依赖打包进一个“fat jar”中: ```xml <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <executions> <execution> <phase>package</phase> <goals> <goal>single</goal> </goals> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>com.example.Main</mainClass> </manifest> </archive> </configuration> </execution> </executions> </plugin> ``` 构建完后,使用 `your-app-1.0-SNAPSHOT-jar-with-dependencies.jar` 文件运行,可避免依赖缺失问题。 ### 3. 验证 Maven 构建流程是否功 若构建过程中出现错误,可能导致生的 JAR 文件不完整。检查构建日志,确保 `mvn clean package` 执行无异常。若构建功,JAR 文件应位于 `target/` 目录下。 ### 4. 检查 Java 环境和版本兼容性 运行 JAR 文件时,确保 Java 版本与项目兼容。例如,若项目使用 Java 9+ 的特性,则需确保运行环境为 JDK 9 或更高版本。使用 `java -version` 检查当前 Java 版本,并确认是否与项目需求一致[^2]。 ### 5. 使用 ProGuard 混淆时的注意事项 如果项目使用了 ProGuard 进行代码混淆,需确保混淆配置正确,避免混淆过程中移除或重命名关键类或方法。检查 ProGuard 配置文件(如 `proguard.cfg`),并确保其包含必要的保留规则,例如: ``` -keep public class com.example.Main { public static void main(java.lang.String[]); } ``` 混淆后,验证生的 `classes-pg.jar` 文件是否包含预期的类结构,并通过解压和比对工具(如 Beyond Compare)确认其完整性[^3]。 ### 6. 部署与测试流程 将构建好的 WAR 文件部署到 Tomcat 时,确保 `WEB-INF/classes` 目录中的类文件正确无误。解压 WAR 文件并替换其中的类文件后,重新打包并部署到 Tomcat 的 `webapps` 目录中。启动 Tomcat 并观察日志文件(如 `catalina.out`)以排查运行时错误。 ### 示例:构建并运行一个可执行 JAR ```bash # 构建项目并生包含主类信息的 JAR mvn clean package # 运行 JAR 文件 java -jar target/your-app.jar ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值