DICOM:dcm4che开源项目导入Eclipse编译错误问题解决方案
背景:
马上跨年了,记得小时候元旦都不是事儿,怎么长大了长大了感觉越来越热闹了反而。各种饭局、各种party,有点hold不住。还是回来整理一下这一年的笔记比较舒服,比较有收获。看了看这个月竟然发文量还不足四篇,遂将Evernote中的一篇老文贴出来水一下,赶巧解决一下之前网友邮件中遇到的相关问题。
dcm4che开源项目:
dcm4che3是github上的开源项目,是java实现的DICOM开源库,采用Maven进行构建。整个工程在Windows文件系统下直接mvn install可以顺利成功。但是导入到Eclipse Mars版本中后出现如下错误:
解决方案:
官方参考资料
该问题出现的原因是m2e eclipse plugin for maven插件不支持pom.xml文件中的execution
maven依赖项的作用域
在定义项目的依赖项的时候,我们可以通过scope来指定该依赖项的作用范围。scope的取值有compile、runtime、test、provided、system和import。
compile:这是依赖项的默认作用范围,即当没有指定依赖项的scope时默认使用compile。compile范围内的依赖项在所有情况下都是有效的,包括运行、测试和编译时。
runtime:表示该依赖项只有在运行时才是需要的,在编译的时候不需要。这种类型的依赖项将在运行和test的类路径下可以访问。
test:表示该依赖项只对测试时有用,包括测试代码的编译和运行,对于正常的项目运行是没有影响的。
provided:表示该依赖项将由JDK或者运行容器在运行时提供,也就是说由Maven提供的该依赖项我们只有在编译和测试时才会用到,而在运行时将由JDK或者运行容器提供。
system:当scope为system时,表示该依赖项是我们自己提供的,不需要Maven到仓库里面去找。指定scope为system需要与另一个属性元素systemPath一起使用,它表示该依赖项在当前系统的位置,使用的是绝对路径。
【注意】:
参照上述方案,可以顺利解决eclipse导入dcm4che工程后提示的如下错误,
而且可以再eclipse中顺利执行dmc4che的maven编译,因为修改的XXXX/.metadata/.plugins/org.eclipse.m2e.core/lifecycle-mapping-metadata.xml文件其含义就是使得eclipse的maven插件m2e忽略其不能识别的execute以及goal等标签,然而在eclipse主界面中我们可以看到整个dcm4che工程中还存在着上百个错误,提示缺少相关的jar依赖包。
但是在maven完成编译后我们可以看到各个目录下已经生成了相应的jar包,并且已经顺利安装到了本地maven仓库中,那么为何dcm4che下还有诸多工程提示缺少依赖jar包呢?
仔细查看一下我们采用官方参考资料中的解决方案发现,我们忽略的execute以及goal对象仅仅解决了m2e控件的错误提示,然而忽略的这两个execute以及goal(注:其实maven的pom.xml中的execute以及goal就类似于VS中常见的编译后事件,也可以说是一种脚本,用户maven各个子模块编译完成后进行相关的依赖性配置。)恰恰是添加maven各模块依赖性的,因此会导致工程中出现缺少jar包的错误提示。
为了验证这一说法,手动将相应的jar包添加到对应的工程中,发现错误提示减少了,如下图dcm4che-core工程中的除了pom.xml的错误都解决了。
由此可以推断出,官方给出的解决方案仅仅是解决了m2e控件无法识别的pom.xml部分的错误提示,然而在eclipse工程中pom.xml除了启动maven编译时之外跟工程修改、编译、调试没有关系,因此我们主要的目的并非是解决pom.xml的错误提示,而主要应该解决dcm4che工程下各模块的依赖关系的错误提示。那么如何解决了?eclipse的m2e控件无法识别的pom.xml中的execution和goal标签恰恰是maven用来完成dcm4che工程各模块依赖性的?
最佳解决方案:
其实解决方案很简单,之所以eclipse中的dmc4che工程提示缺少jar包的错误,原因并非是dcm4che工程源码中的pom.xml本身编写有误,而是eclipse匹配的maven插件m2e不能顺利识别execution和goal相关字段。
当初选用eclipse的m2e来进行dcm4che工程的编译,其目的就是为了方便,因为m2e在导入maven工程时会自动进行编译。既然m2e控件有问题,那么我们是否可以先用maven工具编译,待编译完成后再用eclipse工具导入呢?
cd c:\dcm4che3-mvn\dcm4che-master
mvn install
mvn eclipse:eclipse
注:本地使用的maven工具版本为3.2.5
上述命令行运行成功后,可以看到dcm4che-master各个工程模块下多了一个.project的eclipse工程文件,此时可以通过eclipse的Import直接导入。导入后仅有几个工程的pom.xml文件提示错误,即上文提到的m2e控件无法识别的execution以及goal标签,但是之前提到的dmc4che各模块缺少jar包的错误全部解决了,可以看到pom.xml中控制各模块依赖性的execution以及goal在mvn eclipse:eclipse时已经顺利执行了(maven工具本身是可以识别execution以及goal的),如下图所示:
解决方案2:
目前我们已经确定了mvn已经顺利编译并生成了各个模块的jar包以及相关代码,之所以提示缺少jar包的错误是因为m2e无法执行配置各模块依赖性的execution,按照错误提示在Eclipse的Marketplace搜索并下载安装相关插件,同样可以解决依赖性问题。
解决方案3:
在StackOverflow上还有一种简单的处理方案,虽然得票率不高,但是从简便性上来说应该是最靠谱的。
Errors occurred during the build.
Errors running builder ‘Maven Project Builder’ on project ‘dcm4che-dict’.
No enum constant org.eclipse.m2e.core.lifecyclemapping.model.PluginExecutionAction.executor
Errors running builder ‘Maven Project Builder’ on project ‘dcm4che-js-dict’.
No enum constant org.eclipse.m2e.core.lifecyclemapping.model.PluginExecutionAction.executor
经过验证后,该方案依然无法实行。
安装完插件后,可以再eclipse中编译调试python脚本,另外在配置插件过程中可以利用其“Quick Auto-Config”来解决之前希望制作python绿色免安装包的目的。
作者:zssure@163.com
时间:2015-12-31
DICOM:dcm4che开源项目导入Eclipse编译错误问题解决方案相关推荐
- 开源项目导入eclipse的一般步骤[转]
下载到开源项目后,我们还是希望导入到eclipse中还看,这样要方便点,一般的步骤是这样的 打开源代码目录, 如果看到里面有.calsspath .project文件,那么说明这个项目本来就是ecli ...
- MyEclipse web项目导入Eclipse,详细说明
转载自 MyEclipse web项目导入Eclipse,详细说明 最近导入一个MyEclipse的项目,具体是:spring4.1的web项目,同时遇到了一些问题,总结一下. 1.进入项目目录, ...
- 如何将MyEclipse项目导入eclipse
我们经常会在网上下载一些开源项目,或者从别的地方迁移一些项目进来,但经常会发现导入后各种报错.这是初学java肯定会遇到的问题,本文对一些常见的处理方案做一个总结.(本文将MyEclipse项目导入e ...
- 【转】10个推荐的 PACS/DICOM Server开源项目
10个推荐的 PACS/DICOM Server开源项目 转自:https://zhuanlan.zhihu.com/p/65437040 soolaugust 喜欢我的分享可以关注公众号:雨夜随笔 ...
- 把myeclipse中的web项目导入eclipse中不能编程web项目的解决办法
title: 把myeclipse中的web项目导入eclipse中不能编程web项目的解决办法 tags: grammar_cjkRuby: true --- 右键单击项目,properties-- ...
- DIOCP开源项目-高效稳定的服务端解决方案(DIOCP + 无锁队列 + ZeroMQ + QWorkers) 出炉了
DIOCP开源项目-高效稳定的服务端解决方案(DIOCP + 无锁队列 + ZeroMQ + QWorkers) 出炉了 参考文章: (1)DIOCP开源项目-高效稳定的服务端解决方案(DIOCP + ...
- android项目模块导入eclipse编译报错,android中studio导入eclipse项目报错怎么办
android中studio导入eclipse项目报错怎么办 发布时间:2020-07-15 17:34:45 来源:亿速云 阅读:96 作者:清晨 这篇文章将为大家详细讲解有关android中stu ...
- java导入项目存在,如何将预先存在的Java项目导入Eclipse并启动并运行?
我已经是一个C程序员了很长一段时间,但我是Java的新手,也是Eclipse的新手.我想使用 touch graph "Graph Layout" code来显示我正在使用的一些数 ...
- JavaEE学习08(解决项目导入eclipse后项目中的红错号)
解决项目中的红错号 一.出错如图所示 二.解决步骤 三.解决项目包红错号(代码没报错) 四.解决java compiler level does not match the version of th ...
最新文章
- 安装网关报mysql服务ini_linux 操作系统下ORACLE数据库使用透明网关连接MYSQL
- [Android1.5]打开多个Activity,返回到第一个Activity的问题
- 开启云原生 MOSN 新篇章 — 融合 Envoy 和 Golang 生态
- input发送a.jax_JAX-RS 2.0:自定义内容处理
- 通信中的频谱效率与能量效率
- Atitit 企业常见100个职能 组织职能 社会职能 政府职能 家庭职能 团队职能
- 这回真的要和雅虎再见了 雅虎将转型为投资机构
- 125w短波通信距离_陕西烽火通信短波及超短波产品.doc
- 【libnice】艰难的meson+ ninja手动编译过,vs2022 v143 debug
- Centos虚拟机使用virt-manager创建虚拟机
- 大学计算机课程日记,大学计算机实习日记.docx
- linux etc xdg,Xdg-menu (简体中文)
- 【介绍】全球最大黑客组织:匿名者
- 前端CSS核心内容浮动
- 【测绘程序设计试题集】 试题04 最短路径计算
- 2020年日历电子版(打印版)_2020年日历表(竖版-A4纸打印版)
- Docker入门之安装Docker
- python-pytorch hello world
- 什么?Spring官方推荐的@Transational还能导致生产事故?
- FreeBSD的make