Maven: Custom .jar не разрешает правильные зависимости при обращении - PullRequest
0 голосов
/ 25 мая 2019

Я создаю несколько пользовательских зависимостей Spring Boot Starter для приложения. Я выполнил несколько, но столкнулся с проблемой, с которой я никогда не сталкивался. И я считаю, что это связано с тем, как я упаковываю свою пользовательскую зависимость с Maven.

pom.xml для упаковываемого проекта выглядит следующим образом:

   <?xml version="1.0" encoding="UTF-8"?>
   <project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.ej.gws.starters</groupId>
    <artifactId>mapr-producer-spring-boot-starter</artifactId>
    <version>1.0.0-SNAPSHOT</version>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <maprfs-path>/opt/mapr/lib/maprfs-6.0.1-mapr.jar</maprfs-path>
        <ojai-driver-path>/opt/mapr/lib/mapr-ojai-driver-6.0.1-mapr.jar</ojai-driver-path>
        <flex-json-path>/opt/mapr/lib/flexjson-2.1.jar</flex-json-path>
    </properties>

    <repositories>
        <repository>
            <id>mapr-proxy</id>
            <name>MapR Releases</name>
            <url>http://<Internal Nexus Repository>.com/content/repositories/MapR/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

    <dependencies>
        <!-- Spring Boot Starter Dependencies -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <!-- Web Exception Handler -->
        <dependency>
            <groupId>com.ej.gws.starters</groupId>
            <artifactId>web-exception-handler-spring-boot-starter</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </dependency>

        <!-- JSON Parser -->
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20180813</version>
        </dependency>

         <!--Kafka Client Library for MapR Streams 6.0.1-->
        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka-clients</artifactId>
            <version>1.0.1-mapr-1803-streams-6.0.1</version>
            <exclusions>
                <!-- Do not package maprfs jar, as per MapR Documentation -->
                <exclusion>
                    <groupId>com.mapr.hadoop</groupId>
                    <artifactId>maprfs</artifactId>
                </exclusion>
                <!-- Exclude slf4j transitive dependency to avoid warnings about duplicates -->
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

         <!--Needed by MapR Streams, provided by system Client Library-->
        <dependency>
            <groupId>com.mapr.hadoop</groupId>
            <artifactId>maprfs</artifactId>
            <version>6.0.1-mapr</version>
            <scope>system</scope>
            <systemPath>${maprfs-path}</systemPath>
        </dependency>
        <dependency>
            <groupId>com.mapr.ojai</groupId>
            <artifactId>mapr-ojai-driver</artifactId>
            <version>6.0.1-mapr</version>
            <scope>system</scope>
            <systemPath>${ojai-driver-path}</systemPath>
        </dependency>
        <dependency>
            <groupId>net.sf.flexjson</groupId>
            <artifactId>flexjson</artifactId>
            <version>2.1</version>
            <scope>system</scope>
            <systemPath>${flex-json-path}</systemPath>
        </dependency>
    </dependencies>
</project>

У меня проблема с зависимостью org.apache.kafka:kafka-clients:1.0.1-mapr-1803-streams-6.0.1.

В проекте, который строит .jar, эта зависимость выглядит следующим образом из Maven: enter image description here

Но после запуска mvn install и генерации артефакта, когда я ссылаюсь на него внутри другого приложения, эта зависимость выглядит следующим образом: enter image description here

Итак, я хотел бы задать вопрос: как мне написать мои приложения pom.xml таким образом, чтобы, когда другое приложение ссылалось на него, оно импортировало точно такие же артефакты и версии?

Кроме того, чтобы уточнить, я не хочу строить банку с толстым или толстым слоем.

1 Ответ

0 голосов
/ 25 мая 2019

Нет, вы не можете контролировать, если у вас нет полного доступа к другому приложению.Если это так, вам нужно вручную исключить дублирующуюся зависимость, например, такую:

<dependency>
      <groupId>sample.ProjectA</groupId>
      <artifactId>Project-A</artifactId>
      <version>1.0</version>
      <scope>compile</scope>
      <exclusions>
        <exclusion>  <!-- declare the exclusion here -->
          <groupId>sample.ProjectB</groupId>
          <artifactId>Project-B</artifactId>
        </exclusion>
      </exclusions> 
    </dependency>

Кстати, часто используйте

mvn dependency:tree

, чтобы определить действительную зависимость.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...