maven项目 在eclipse,InteliJ IDEA中的一些问题

转载请注明出处,谢谢!

不论我们用什么ide来编辑我们的代码,最终的产品都会脱离ide来运行;正如燕飞离了巢,正如你离开了家,不期然就会运转出现问题。

- 单强 2018年1月26日11:53


大家是否也思考过:

问题1:maven项目在eclipse中正常运行,但是到了InteliJ IDEA中却空指针?报错?

问题2:为什么src/test/java中的代码可以import src/main/java中的类,反之则不行?

解答1:各ide的编译规则不同。

解答2:maven的生命周期决定的。

解决根源的处理方案:放下ide,关注maven本身,回到maven根目录下执行maven命令(虽然ide已经集成了部分maven命令)。


看到了我的解答,正在浏览本网页的你可能已经get到了我的点;但本着做事有始有终的原则,我还是要继续下去:

默认情况下(熟练使用的朋友们可更改编译时机):

eclipse保存时编译 简记为-> Ctrl S

InteliJ IDEA运行时编译 简记为-> Runtime

这就决定了在编译工作上,InteliJ IDEA是更向maven靠拢的(实际上InteliJ IDEA的编译也不完全符合maven的规范)。

我们可以用mvn help:effective-pom命令来看一下,下图只截取compile与test-compile部分

可以看出,maven的编译顺序是先编译src/main/java,后编译src/test/java;

这便解释了问题2 -> src/test/java中的代码可以import src/main/java中的类,反之则不行;因为src/test/java中的类还未被编译,所以不能import,否则会报错。

但是如果使用eclipse编辑的话,src/main/java中的代码是可以引用src/test/java中的类的,原因已在上面给出,不再赘述(没有找到的朋友们欢迎留言)。


以上述说了eclipse编辑maven项目时的弊端,InteliJ IDEA的同学们不要幸灾乐祸,我这就举一个InteliJ IDEA编辑maven时检查不到的错误。

src/main/java下的类

 

使用junit3,因为是在我创建maven时自动生成的,所以就用了,习惯用@Test注解的同学可以导入junit4+的包;

目录结构以及App,AppTest中的代码如图所示,可以看到在src/test/java目录下的AppTest引入了App对象。

到此一切都没有什么不一样;

下面我们在pom.xml中添加以下代码:(覆盖掉effective-pom中执行编译的部分)

<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <executions>
        <execution>
            <id>default-compile</id>
            <phase>clean</phase>
            <goals>
                <goal>help</goal>
            </goals>
        </execution>
        <execution>
            <id>default-testCompile</id>
            <phase>test-compile</phase>
            <goals>
                 <goal>testCompile</goal>
            </goals>
        </execution>
    </executions>
</plugin>            

我们可以看到InteliJ IDEA并没有什么异常,运行测试用例,发现运行正常,并且target目录下生成了对应的四个目录,这是IDEA的Runtime时自动编译的:

我们再执行:mvn clean test-compile

 

报错:

此时,由于我们修改了pom.xml文件,导致编译阶段src/main/java中的代码并没有被编译,在src/test/java中的代码也就访问不到src/main/java中的类。

IDEA自带的编译效果宣布与maven的要求不匹配,IDEA不会去关心pom.xml中的plugin来编译。


结论:maven的项目最终还是要回归到maven命令来进行编译的,所以不要依靠ide的编译;转移或发布之前请执行mvn clean package,如果success,那么恭喜,此份代码放在任何一款ide下都会正确的运行(所以朋友们就不要再问为什么我的代码在eclipse中能正常运行,而InteliJ IDEA中却不能运行了,通过本文你应该知道,即使在IDEA中能正常运行,也未必就符合maven的意图)。

git demo

 

转载于:https://www.cnblogs.com/top37/p/8360044.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值