Конфликт в классах / ресурсах и сборка mvn не удалась - PullRequest
0 голосов
/ 26 мая 2020

Я только что добавил дублирующийся плагин 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 clean install » и идентифицированный ниже повторяющийся ресурс, найденный в классах / ресурсах, и сборка 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]:

Я исключил " jboss-jaxrs-api_2.1_spe c артефакт " в дочернем pom . xml файл для артефакта "qualitytestservApi" и приводит к исключению classnotfound.

Дочерний pom. xml (исключить: jboss-jaxrs-api_2.1_spe c артефакт)

 <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. Как я могу перенести то же самое с новым пакетом. И сделать так, чтобы функционал работал как Его.

1 Ответ

0 голосов
/ 26 мая 2020

Джерси-бандл таким образом использовать нельзя. Как указано в его spe c, это предназначено только для разработчиков, которые не используют систему зависимостей 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, который является более современным. to date, чем тот, который включен в 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>

Я не могу его протестировать, поскольку модули amazon не находятся в центре maven.

...