gpt4 book ai didi

java - Gradle - 同一库的 2 个不同版本

转载 作者:行者123 更新时间:2023-12-01 11:37:43 26 4
gpt4 key购买 nike

我正在使用 Gradle 构建一个使用 Hadoop 和 Jetty 的项目。我使用与 Java Servlets 3.0 兼容的较新版本的 Jetty。

Hadoop 似乎使用与 Java Servlet 3.0 兼容的旧版本 Jetty。

当我尝试在 Web 服务器上运行某些方法时,会引发 NoSuchMethodError。我相信这是因为正在使用旧版本的 Servlets api。

理想情况下,我想指定 Hadoop 使用的 Jetty 依赖于 servlet API 2.5,而我的 Jetty 服务器使用 3.0。

如果这是不可能的,我想指定两者都使用 3.0。

我的整个build.gradle:

        apply plugin: 'java'

sourceCompatibility = 1.8
version = '1.0'

repositories {
mavenCentral()
jcenter() // for a solr dependency
}

dependencies {
//testCompile group: 'junit', name: 'junit', version: '4.11'


compile group: 'org.eclipse.jetty.aggregate', name:'jetty-all-server', version:'8.1.16.v20140903'

compile group:'org.codehaus.jackson', name:'jackson-core-asl',version: '1.9.13'
compile group:'org.codehaus.jackson', name:'jackson-mapper-asl',version: '1.9.13'
compile group:'org.apache.commons', name: 'commons-csv', version: '1.1'

compile group:'org.apache.lucene', name:'lucene-core', version:'5.0.0'
compile group:'org.apache.solr', name: 'solr-core', version:'5.0.0'

compile group:'org.apache.hadoop', name:'hadoop-core', version:'1.2.1'

compile group:'javax.servlet', name:'javax.servlet-api', version:'3.0.1'
}

project.getConfigurations().all { config->
config.resolutionStrategy.eachDependency
{DependencyResolveDetails details->

if (details.requested.group == 'org.mortbay.jetty' && details.requested.name == "servlet-api")
{
details.requested.group="javax.servlet"
details.requested.name="javax.servlet-api"
details.requested.version="3.0.1"
System.out.println(details.requested.properties);
}
}
}

jar
{
doFirst
{



def serviceDir = file("$buildDir/META-INF/services")
serviceDir.deleteDir()
serviceDir.mkdirs()

for (file in configurations.runtime){
zipTree(file).matching{ include 'META-INF/services/*'}.each {
f-> new File(serviceDir, f.name) <<f.getText("UTF-8")
}
}
}

manifest
{
attributes 'Main-Class': 'Main'
}

from (configurations.compile.collect {it.isDirectory() ?it:zipTree(it) })
{
exclude 'META-INF/**'
}


from fileTree(buildDir).matching{ include 'META-INF/services/*'}
}

最佳答案

清理你的build.gradle:

apply plugin: 'java'

sourceCompatibility = JavaVersion.VERSION_1_8
version = '1.0'

repositories {
jcenter()
}

dependencies {
compile 'org.eclipse.jetty.aggregate:jetty-all-server:8.1.16.v20140903'
compile 'org.codehaus.jackson:jackson-core-asl:1.9.13'
compile 'org.codehaus.jackson:jackson-mapper-asl:1.9.13'
compile 'org.apache.commons:commons-csv:1.1'
compile 'org.apache.lucene:lucene-core:5.0.0'
compile 'org.apache.solr:solr-core:5.0.0'
compile 'org.apache.hadoop:hadoop-core:1.2.1'
compile 'javax.servlet:javax.servlet-api:3.0.1'
}

检查jetty配置:

javax.servlet.http.HttpServletRequest.getParts()仅从 Servlet API 3.0 开始可用

要检查的事项:

  • 确保您正在运行 Jetty 8 或 Jetty 9
  • 确保您的 WEB-INF/web.xml 配置为使用 Servlet API 3.0
  • 确保您的构建工具使用 servlet-api 3.0 jar。
  • 确保您的 WEB-INF/lib 目录中有相同的 servlet api 3.0 jar。

来源:Facing java.lang.NoSuchMethodError: HttpServletRequest.getParts()Ljava/util/Collection

关于java - Gradle - 同一库的 2 个不同版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29809456/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com