Maven (затмение) использует затененную банку вместо оригинальной - PullRequest
0 голосов
/ 03 марта 2020

У меня есть проект, в котором будут перемещены пакеты (затененная банка)

pom. xml:

<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>

  <artifactId>artifact-child</artifactId>
  <name>artifact-child</name>

  <parent>
    <groupId>group</groupId>
    <artifactId>artifact</artifactId>
    <version>${revision}</version>
  </parent>

  <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>3.2.2</version>

        <configuration>
          <!--  <shadedArtifactAttached>true</shadedArtifactAttached> -->

          <relocations>
            <reloaction>
              <pattern>example</pattern>
              <shadedPattern>${super-package}.example</shadedPattern>
            </reloaction>
          </relocations>          
        </configuration>

        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
          </execution>
        </executions>
      </plugin>  
    </plugins>
  </build>
</project>

И у меня есть второй проект, для которого требуется затенение jar во время выполнения.

pom. xml:

<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>

  <groupId>testversion</groupId>
  <artifactId>testv</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>testv</name>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>group</groupId>
      <artifactId>artifact-child</artifactId>
      <version>0.0.1</version>
      <classifier>shaded</classifier>
    </dependency>
  </dependencies>
</project>

Мой вопрос:

Eclipse найдите другой проект в своей рабочей области и используйте непосредственно исходный код.

Например: я должен написать import example.myclass вместо import org.example.myclass.

В некоторых случаях это может быть проблемой. Можно ли сказать, что maven или Eclipse должны использовать «затененную банку» вместо исходного исходного кода?

Нужно ли создавать онлайн-хранилище, чтобы maven мог загружать только затененную банку?



Я обнаружил два других сообщения stackoverflow (без результата):

Мультимодульная затененная зависимость Maven Eclipse

Как установить заштрихованную банку вместо оригинальной баночки

РАСТВОРЕНО:
Мои ошибки:
1. Версия родителя должна быть объявлена ​​напрямую, а не через свойства
2. Забыл запустить «Maven Install»

Решение:
Maven работает без ошибок, но Eclipse использует открытый проект, а не затененный jar.
Нашел решение здесь: Как я могу загрузить один необработанный файл из частного репозитория github с помощью командной строки? .
Открыть свойства проекта. Под Tap Maven снимите флажок «Разрешить зависимости из проектов Workspace»

1 Ответ

0 голосов
/ 03 марта 2020

Если затененный jar является вашей зависимостью, вы просто ссылаетесь на классы / пакеты, как они определены в затененном jar.

Если Eclipse показывает ошибку, Eclipse неверен (что часто имеет место). Прежде всего, попробуйте построить свой проект с чем-то вроде clean verify. Затем вы видите, есть ли у вас действительно ошибки (или если Eclipse их выдумал).

Если ошибки Eclipse вас беспокоят, попробуйте ALT + F5.

...