我正在关注这篇文章
https://www.linkedin.com/pulse/building-jax-rs-project-eclipse-gradle-neeraj-malhotra
关于如何使用Gradle在Eclipse中构建JAX-RS项目
我在用
Eclipse Java EE IDE for Web Developers. Version: Oxygen.2 Release (4.7.2) Build id: 20171218-0600
我的目标运行时是
WildFly Full 11.0.0.Final (WildFly Core 3.0.8.Final)
我的gradle构建文件
apply plugin: 'war' apply plugin: 'eclipse-wtp' sourceCompatibility = 1.8 repositories { mavenCentral() } dependencies { compile "javax.ws.rs:javax.ws.rs-api:2.0.1" providedCompile "javax.servlet:javax.servlet-api:3.1.0" }
我可以选择所需的Facets并设置目标运行时等.
我选择的方面是
cdi 2.0 dynamic web module 3.1 java 1.8 jax-rs 2.1
点击"应用并关闭"后,项目没有报告构建问题.
我现在不喜欢的是项目有两个WEB-INF文件,一个是项目级别,另一个是WebContent文件夹,我期望它.
即使我没有选择生成web.xml,也有一个web.xml文件.
当我通过右键单击gradle.build文件并选择gradle> refresh gradle项目来刷新我的gradle构建时,真正的问题就开始了.
刷新完成后,已取消选择以下构面
cdi 2.0 jax-rs 2.1
我的动态网络模块已从3.1降级到2.4
除此之外,我还有以下两个MARKERS
CDI Core Validator cannot run on project gradle_jax_rs because Validation Builder precedes CDI (Contexts and Dependency Injection) Builder. EL Validator cannot run on project gradle_jax_rs because Validation Builder precedes JBoss Knowledge Base Builder.
如何配置我的动态Web项目,以便将我想要的Facets保持在关卡中?
什么是我的gradle.build缺少?
UPDATE
所以我追踪了Gradle的罪魁祸首
org.gradle.plugins.ide.eclipse.EclipseWtpPlugin:- project.getPlugins().withType(WarPlugin.class, new Action() { @Override public void execute(WarPlugin warPlugin) { ((IConventionAware) task.getFacet()).getConventionMapping().map("facets", new Callable >() { @Override public List
call() throws Exception { return Lists.newArrayList( new Facet(Facet.FacetType.fixed, "jst.java", null), new Facet(Facet.FacetType.fixed, "jst.web", null), new Facet(Facet.FacetType.installed, "jst.web", "2.4"), new Facet(Facet.FacetType.installed, "jst.java", toJavaFacetVersion(project.getConvention().getPlugin(JavaPluginConvention.class).getSourceCompatibility())) ); } }); } });
这导致重复的jst.web
条目org.eclipse.wst.common.project.facet.core.xml
为什么Gradle无法正常工作.有关使用所选方面构建动态Web项目的困难吗?
我已升级buildship
到...
http://download.eclipse.org/buildship/updates/e47/releases/2.x/2.2.1.v20180125-1441
即使添加到我的gradle.build,它仍然无法正确构建所需的动态Web项目
eclipse { wtp { facet { facet name: 'java', version: '1.8' facet name: 'jst.web', version: '3.1' facet name: 'wst.jsdt.web', version: '1.0' } } }
发现这个笨重的黑客修复了重复的jst.web版本
apply plugin: 'war' apply plugin: 'eclipse-wtp' eclipse.wtp.facet { file { facet name: 'jst.web', version: '3.1' def oldJstWebFacet = facets.findAll { it.name == 'jst.web' && it.version == '2.4' } facets.removeAll(oldJstWebFacet) facet name: 'java', version: '1.8' facet name: 'jst.cdi', version: '2.0' facet name: 'jst.jaxrs', version: '2.1' facet name: 'wst.jsdt.web', version: '1.0' } } repositories { mavenCentral() } dependencies { compile "javax.ws.rs:javax.ws.rs-api:2.0.1" providedCompile "javax.servlet:javax.servlet-api:3.1.0" }
但是现在我有以下两个日食错误标记
CDI Core Validator cannot run on project Attempt0002 because Validation Builder precedes CDI (Contexts and Dependency Injection) Builder. EL Validator cannot run on project Attempt0002 because Validation Builder precedes JBoss Knowledge Base Builder.
我可以通过在eclipse中修改构建器顺序来解决此问题,但是一旦我使用Gradle构建项目,问题就会重新出现.