我刚刚添加了重复的finder maven插件,并且我的父子pom如下所示:
由于pom.xml文件很大,并且仅复制两个pom.xml文件的依赖项标签:
父项(工件:qualitytestservApi)
<dependencies>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
</dependencies>
在父存储库中,我有一个调用 javax.ws.rs。* 包的接口,如下所示:
@Produces({ MediaType.TEXT_PLAIN })
@Path("/hello")
public Response sayHello();
我将在子类中实现sayHello()接口,并且pom.xml文件将如下所示:
孩子:
<dependencies>
<!-- The below dependency is parent pom.xml -->
<!-- Start -->
<dependency>
<groupId>com.amazon.kindle.samples</groupId>
<artifactId>qualitytestservApi</artifactId>
<version>${project.version}</version>
</dependency>
<!-- End -->
<dependency>
<groupId>com.amazon.kindle.springboot</groupId>
<artifactId>spring-boot-starter-kindle-pps</artifactId>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.jaxrs/jackson-jaxrs-json-provider -->
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.11.0</version>
</dependency>
<!-- I added the below dependencies It works fine if I removed the below one-->
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-bundle</artifactId>
<version>1.19.4</version>
</dependency>
</dependencies>
我有一个用于从父存储库实现接口的类,如下所示:
@Override
public Responses sayHello() {
String responseText = "Hello, World!";
return Responses
.status(Response.Status.OK)
.entity(responseText)
.build();
}
我刚刚运行了“ mvn全新安装”命令,并在下面的类/资源中发现重复的资源,并且maven构建失败:
[WARNING] Found duplicate and different classes in [com.sun.jersey:jersey-bundle:1.19.4, org.jboss.spec.javax.ws.rs:jboss-jaxrs-api_2.1_spec:1.0.3.Final]:
我在子pom.xml文件中排除了“ qualitytestservApi”工件的“ jboss-jaxrs-api_2.1_spec工件”,这导致classnotfound异常。
子pom.xml(排除:jboss-jaxrs-api_2.1_spec工件)
<dependency>
<groupId>com.amazon.kindle.samples</groupId>
<artifactId>qualitytestservApi</artifactId>
<version>${project.version}</version>
<exclusions>
<exclusion>
<groupId>org.jboss.spec.javax.ws.rs</groupId>
<artifactId>jboss-jaxrs-api_2.1_spec</artifactId>
</exclusion>
</exclusions>
</dependency>
错误:
java.lang.NoClassDefFoundError: javax/ws/rs/core/Configurable
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1009)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:801)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:699)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:622)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:580)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:374)
at javax.ws.rs.ext.FactoryFinder.newInstance(FactoryFinder.java:60)
at javax.ws.rs.ext.FactoryFinder.find(FactoryFinder.java:117)
at javax.ws.rs.ext.RuntimeDelegate.findDelegate(RuntimeDelegate.java:105)
at javax.ws.rs.ext.RuntimeDelegate.getInstance(RuntimeDelegate.java:91)
at javax.ws.rs.core.Response$ResponseBuilder.newInstance(Response.java:356)
at javax.ws.rs.core.Response.status(Response.java:104)
at javax.ws.rs.core.Response.status(Response.java:116)
at com.amazon.kindle.samples.impl.SampleResourceImpl.sayHello(SampleResourceImpl.java:32)
at com.amazon.kindle.samples.impl.SampleResourceImplTest.testSayHello(SampleResourceImplTest.java:19)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:639)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:821)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1131)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:124)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:108)
at org.testng.TestRunner.privateRun(TestRunner.java:773)
at org.testng.TestRunner.run(TestRunner.java:623)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:357)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:352)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:310)
at org.testng.SuiteRunner.run(SuiteRunner.java:259)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1185)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1110)
at org.testng.TestNG.run(TestNG.java:1018)
at org.apache.maven.surefire.testng.TestNGExecutor.run(TestNGExecutor.java:135)
at org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.executeMulti(TestNGDirectoryTestSuite.java:193)
at org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.execute(TestNGDirectoryTestSuite.java:94)
at org.apache.maven.surefire.testng.TestNGProvider.invoke(TestNGProvider.java:146)
at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:383)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:344)
at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:125)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:417)
Caused by: java.lang.ClassNotFoundException: javax.ws.rs.core.Configurable
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
... 49 more
有人可以帮助我排除正确的软件包
更新的问题:
如果使用以下程序包,它将很好地工作:
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.31</version>
</dependency>
kwakeroni的积分。
我对该软件包非常陌生,只想使用我之前使用的以下导入内容。
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import com.sun.jersey.api.json.JSONConfiguration;
import com.sun.jersey.client.urlconnection.HTTPSProperties;
代码:
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import javax.ws.rs.core.MediaType;
import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import com.sun.jersey.api.json.JSONConfiguration;
import com.sun.jersey.client.urlconnection.HTTPSProperties;
public class SSLIgnorForQAEnv{
public static SSLContext getContextAndIgnoreServerCerts() {
SSLContext sslcontext = null;
try {
TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
@Override
public void checkServerTrusted(X509Certificate[] arg0,
String arg1) throws CertificateException {
}
@Override
public void checkClientTrusted(X509Certificate[] arg0,
String arg1) throws CertificateException {
}
} };
sslcontext = SSLContext.getInstance("TLS");
sslcontext.init(null, trustAllCerts, null);
} catch (Exception e) {
}
return sslcontext;
}
public static HostnameVerifier getHostnameVerifierAndIgnoreVerification() {
return new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
};
}
public static String getWebResource() {
Client client;
WebResource resource;
int connectTimeout = 60000;
int readTimeout = 60000;
ClientConfig config = new DefaultClientConfig();
config.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING,
Boolean.TRUE);
try {
//SSLContext sslcontext = getSSLContext();
SSLContext sslcontext=getContextAndIgnoreServerCerts();
HostnameVerifier hostnameVerifier = getHostnameVerifierAndIgnoreVerification();
HTTPSProperties httpsProperties = new HTTPSProperties(
hostnameVerifier, sslcontext);
config.getProperties().put(
HTTPSProperties.PROPERTY_HTTPS_PROPERTIES, httpsProperties);
} catch (Exception e) {
e.printStackTrace();
}
config.getClasses().add(JacksonJsonProvider.class);
client = Client.create(config);
client.setConnectTimeout(connectTimeout);
client.setReadTimeout(readTimeout);
resource = client
.resource("https://amazon.service-now.com/api/now/table/incident?sysparm_query=priorityIN1%2C2%5Eu_root_cause_domain");
String result = resource.accept(MediaType.APPLICATION_JSON).header("Content-Type", "application/json").header("Authorization", "Basic YXB21343cGlfZG81882hY2U5NDQxMg==").get(String.class);
return result;
}
public static String getResposne()throws Exception
{
String sslContext = SSLIgnoreForQAEnv.getWebResource();
System.out.println(sslContext);
return sslContext;
}
上面的代码在jersy客户端库中可以正常工作。如何使用新程序包进行迁移。并使该功能按其功能运行。
答案 0 :(得分:0)
Jersey捆绑包不能以这种方式使用。如其规范所示, 仅用于不使用Maven依赖系统的开发人员。而且,它很旧。
已被org.glassfish.jersey.core
库jersey-server
和jersey-client
取代:
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.31</version>
</dependency>
使用jakarta.ws.rs-api
,它比jersey-bundle
中包含的更新,并且比jboss更正式。我想您上面提到的排除对象应该可以工作:
<dependency>
<groupId>com.amazon.kindle.samples</groupId>
<artifactId>qualitytestservApi</artifactId>
<version>${project.version}</version>
<exclusions>
<exclusion>
<groupId>org.jboss.spec.javax.ws.rs</groupId>
<artifactId>jboss-jaxrs-api_2.1_spec</artifactId>
</exclusion>
</exclusions>
</dependency>
我无法测试它,因为亚马逊模块不在maven中央。