我正在关注这篇文章
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"
}
我可以选择所需的方面并设置目标运行时等。
我选择的方面是
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 > 刷新 gradle 项目来刷新 gradle 构建时,真正的问题就开始了。
刷新完成后,以下方面已被取消选择
cdi 2.0
jax-rs 2.1
我的动态 Web 模块已从 3.1 降级到 2.4
除此之外,我还有以下两个标记
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 项目,使其保持我所需的 Facet 级别?
我的 gradle.build 缺少什么?
更新
所以我已经在 Gradle 中找到了罪魁祸首
org.gradle.plugins.ide.eclipse.EclipseWtpPlugin:-
project.getPlugins().withType(WarPlugin.class, new Action<WarPlugin>() {
@Override
public void execute(WarPlugin warPlugin) {
((IConventionAware) task.getFacet()).getConventionMapping().map("facets", new Callable<List<Facet>>() {
@Override
public List<Facet> 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()))
);
}
});
}
});
这会导致 org.eclipse.wst.common.project.facet.core.xml
中出现重复的 jst.web
条目
<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
<fixed facet="jst.java"/>
<fixed facet="jst.web"/>
<installed facet="jst.web" version="2.4"/>
<installed facet="jst.java" version="1.8"/>
<installed facet="jst.web" version="3.1"/>
</faceted-project>
为什么 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"
}
但是现在我有以下两个 Eclipse 错误标记
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 构建项目,问题就会再次出现。
最佳答案
我发现的解决方案如下:-
按如下方式破解 gradle 构建文件:-
apply plugin: 'war'
apply plugin: 'eclipse-wtp'
eclipse {
project {
buildCommands.clear();
buildCommand 'org.eclipse.jdt.core.javabuilder'
buildCommand 'org.eclipse.wst.common.project.facet.core.builder'
buildCommand 'org.eclipse.buildship.core.gradleprojectbuilder'
buildCommand 'org.jboss.tools.jst.web.kb.kbbuilder'
buildCommand 'org.jboss.tools.cdi.core.cdibuilder'
buildCommand 'org.eclipse.wst.validation.validationbuilder'
}
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"
}
“提高开发人员生产力”真的?????????
关于eclipse - 如何将 Java Gradle 项目转换为 Dynamic Web 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48828869/