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的意图)。

原文地址:https://www.cnblogs.com/top37/p/8360044.html

时间: 2024-08-28 17:32:18

maven项目 在eclipse,InteliJ IDEA中的一些问题的相关文章

maven项目导入eclipse的相关配置

昨天将一个maven项目导入eclipse中,由于之前不了解maven,将maven项目导入后不知道如何发布,故请教了同事,在此总结下使用maven入门配置及maven项目导入eclipse后的相关的设置. 1.maven安装及配置 a.下载maven包,下载地址:http://maven.apache.org/download.cgi,我下载的是3.0.5版本 b.加压缩,将解压后的文件夹放到D盘即可,另外设置本地仓库地址,我的地址的是  D:\mvnRepository. 需通过修改D:\a

maven项目导入eclipse后的编译问题

maven导入eclipse后,就有了两种编译,一种是eclipse自带的编译,另一种是Run As -> Maven install.一般来说,用eclipse管理maven项目后,就不再需要使用eclipse自带的编译,但有些特殊情况会用到,比如,新建了一个Project,然后在编译路径中关联Maven项目.在编译本地Project时有时会触发Maven项目运行eclipse自带的编译,这个编译无法替代Maven install,有时会出些问题,一般来说,这时重新Maven install就

【tomcat 无法部署】svn上下载的maven项目无法部署到tomcat中

问题: svn上下载的maven项目无法部署到tomcat中,tomcat不识别项目,但是这个项目确实是web项目 发现的过程: 然后依次产看项目的编译版本: 项目的依赖架包: 才发现: 解决方法: 修改了这里的版本~~~ 将这三部分的JDK版本统一~~ 项目就可以部署到tomcat中了~~

将maven项目打包在docker容器中的运行过程

maven项目打包在docker容器中的运行过程 第一步:将springboot项目打包成jar包 第二步:将jar拷贝到虚拟机中,利用xftp工具将jar包拷贝到虚拟机中 第三步:docker pull java拉取java镜像 第四步:编写dockerfile文件 第五步:构建镜像 第六步:基于镜像运行容器 原文地址:https://www.cnblogs.com/jasonboren/p/12272347.html

maven项目在eclipse启动报错:java.lang.ClassNotFoundException

问题: 用eclipse创建maven项目的时候,pom.xml中相关的依赖jar已经导入进去,还会报java.lang.ClassNotFoundException的错误,提示找不到相关的jar包,但是在maven Dependencies中又可以找到相关的jar包. 问题原因: 我们进入到tomcat的部署路径下:E:\workplace4.6\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\springmvc.r

Maven项目搭建-Eclipse版

一.Maven简介 Maven是基于Java平台的项目构建(mvn clean install).依赖管理(中央仓库,Nexus)和项目信息管理的项目管理工具. Maven是基于项目对象模型(POM),是声明式的,项目构建过程和过程各个阶段所需的工作都由插件实现,并且大部分插件都是现成的,开发者只需要声明项目的基本元素,Maven就执行内置的,完整的构建过程.这在很大程度上消除了重复.在这里可以对比Make和Ant,它俩是过程式的,开发者需要显示的指定一个目标,以及完成该目标所需要执行的任务.针

Maven 项目在 Eclipse 的创建配置

第1步 New 菜单 Other.. -> Maven -> Maven Project ,然后单击 Next .如下图所示 第2步 在New Maven Project向导中,选择Create a simple project并指定项目保存的目录(如:F:\worksp\Maven\webproject),然后单击Next.如下图所示 - 第3步 第4步 打开pom.xml文件并在其中添加servlet依赖项和Tomcat maven插件,如下代码所示,pom.xml - 1 <pro

【Java】SVN下载maven项目到eclipse之后,项目红叉,pom.xml出现Missing artifact fakepath:dubbo:jar:2.8.5等缺少jar包情况

刚入公司,从svn上把代码弄下来之后导入eclipse,一般是maven项目,往往项目都会有红叉.如果排除代码本身问题,一般是jar包没有. 鼠标点开pom.xml文件,在约束那里一般有红叉,鼠标放上去一般会提示Missing artifact fakepath:dubbo:jar:2.8.5等提示,表示本地仓库缺少jar包. 如果本地仓库确实没有,一般点击maven-update project,他会自动去私服下载. 如果你本地仓库已经有了,往往是之前没有下完整的.lastUpdated的ja

maven项目转eclipse工程的命令:eclipse.bat

call mvn clean:clean call mvn eclipse:eclipse -DdownloadSources=true @pause 复制以上内容,保存为eclipse.bat 以后从svn上拉下maven项目的源代码的时候,可以用它转为eclipse的工程,就可以直接在eclipse里打开了