Maven编译报不兼容类型

本文介绍了一个旧的非Maven项目在转换为Maven项目后遇到的编译问题,特别是关于“不兼容的类型:Object无法转换为T”的错误。文中详细探讨了两种常见解决方案的不足之处,并分享了最终成功解决问题的方法。

旧的非Maven项目转Maven项目,编译打包时提示多Warning,大部分Warning并不影响编译打包,可以忽略。但有一些代码报“不兼容的类型:Object无法转换为T”,导致无法编译通过。

原因

“不兼容的类型:Object无法转换为T”错误原因:Maven默认采用javac编译器进行代码编译,而javac编译器对代码检查较严格。
  

解决办法

网上流行的解决方案,
1、开发环境,采用Eclipse的JDT编译,即Project–>Clean触发Eclipse编译,正常运行。
2、Maven编译打包,修改pom文件,指定maven-compiler-plugin的compilerId为eclipse,并使用plexus-compiler-eclipse包。

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <fork>true</fork>
                    <compilerArgument>-nowarn</compilerArgument>
                    <encoding>UTF-8</encoding>
                    <compilerId>eclipse</compilerId>
                </configuration>
                 <dependencies>
                    <dependency>
                        <groupId>org.codehaus.plexus</groupId>
                        <artifactId>plexus-compiler-eclipse</artifactId>
                        <version>2.0</version>
                    </dependency>
                </dependencies>
            </plugin>

经测试发现:mvn compile可正确编译,但其实所有报Warning“Type mismatch”(类型不匹配)的类都没有编译打包,项目启动时会报缺少类,这个办法不可行

最终方案

花了一整天时间查找解决办法,最终采用最简单直接的方法:修改所有报“Object 无法转化为T”的代码,编译打包通过

心得

解决这个问题过程,最深的感触是:有些时候,最简单的方法可能最奏效(不过不折腾下谁知道呢)。
也许是我查找方式不对,如有其它方法,请留言,不吝指教

### Maven编译时出现UTF-8不可映射字符的解决方案 Maven编译项目时,如果代码文件使用的是UTF-8编码,而Maven默认使用GBK编码进行编译,则可能会导致“编码UTF-8的不可映射字符”问题。这种问题可以通过配置Maven编译插件来解决,确保编译时使用的字符集与代码文件一致[^1]。 #### 1. 配置`maven-compiler-plugin` 通过修改项目的`pom.xml`文件,在`<build>`节点下的`<plugins>`中添加或修改`maven-compiler-plugin`的配置,指定编译时使用的字符集为UTF-8。例如: ```xml <build> <plugins> <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> </plugins> </build> ``` 上述配置中,`<encoding>UTF-8</encoding>`明确指定了编译时使用的字符集为UTF-8,从而避免了编码不一致的问题[^2]。 #### 2. 修改IDE的默认编码设置 如果项目在IDE(如Eclipse或IntelliJ IDEA)中开发,还需要确保IDE的默认编码设置与项目一致。例如,在Eclipse中可以按照以下步骤修改: 1. 打开菜单:`Window -> Preferences`。 2. 导航到 `General -> Workspace`,将`Text file encoding`设置为`UTF-8`。 3. 对于特定类型的文件(如Java源文件),可以导航到`General -> Content Types`,选择`Java Source File`,并将默认编码设置为`UTF-8`。 完成上述设置后,重新编译项目以验证问题是否解决[^3]。 #### 3. 使用命令行参数指定编码 如果无法修改`pom.xml`文件,也可以通过命令行参数指定编码。运行Maven编译时,添加`-Dfile.encoding=UTF-8`参数,例如: ```bash mvn clean compile -Dfile.encoding=UTF-8 ``` 此方法适用于临时解决编码问题,但推荐通过`pom.xml`配置的方式永久解决问题[^4]。 #### 4. 检查`maven-compiler-plugin`版本 需要注意的是,`maven-compiler-plugin`的不同版本对编码问题的处理方式有所不同。对于`<=2.5.1`的版本,如果出现编码错误,可能导致编译失败;而对于`>=3.0`的版本,即使出现警告,通常也能正常完成编译。因此,建议使用较新版本的`maven-compiler-plugin`以获得更好的兼容性和稳定性[^1]。 --- ### 示例代码块 以下是一个完整的`pom.xml`片段示例: ```xml <build> <plugins> <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> </plugins> </build> ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值