Ответ 1
Слишком плохо, после открытия билета с JetBrains эта проблема была ранее сообщена и в настоящее время не поддерживается в IntelliJ.
У меня есть два модуля: Component и Application. Модуль Component затенен из-за конфликта зависимостей (буферов протокола google) позже в процессе сборки.
<!-- snip from Component pom.xml -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<configuration>
<relocations>
<relocation>
<pattern>com.google.protobuf</pattern>
<shadedPattern>my.package.protocols.shaded.com.google.protobuf</shadedPattern>
</relocation>
</relocations>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
Приложение зависит от модуля Component. Однако исходные файлы в приложении не могут ссылаться на затененную библиотеку, от которой зависит компонент. Это важно для взаимодействия с компонентом.
<-- snip from Application pom.xml -->
<dependency>
<groupId>my-group</groupId>
<artifactId>component</artifactId>
<version>${project.version}</version>
</dependency>
Несмотря на то, что импорт не найден IntelliJ, сборка Maven отлично работает. Что я пропущу/делаю неправильно?
Слишком плохо, после открытия билета с JetBrains эта проблема была ранее сообщена и в настоящее время не поддерживается в IntelliJ.
Я исправил аналогичную проблему, закрасив также исходный файл jar и распаковав его в исходный каталог:
<build>
<sourceDirectory>${project.build.directory}/shaded-sources</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-source-plugin</artifactId>
<configuration>
<skipSource>true</skipSource>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<createSourcesJar>true</createSourcesJar>
<shadeSourcesContent>true</shadeSourcesContent>
<createDependencyReducedPom>false</createDependencyReducedPom>
<artifactSet>
<includes>
<include>com.google.guava:*</include>
</includes>
</artifactSet>
<relocations>
<relocation>
<pattern>com.google.common</pattern>
<shadedPattern>org.apache.drill.shaded.com.google.common</shadedPattern>
</relocation>
</relocations>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack</id>
<phase>package</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>org.apache.drill.contrib</groupId>
<artifactId>guava-shaded</artifactId>
<version>${project.version}</version>
<type>jar</type>
<outputDirectory>${project.build.directory}/classes</outputDirectory>
<includes>**/**</includes>
</artifactItem>
<artifactItem>
<groupId>org.apache.drill.contrib</groupId>
<artifactId>guava-shaded</artifactId>
<version>${project.version}</version>
<type>jar</type>
<classifier>sources</classifier>
<overWrite>true</overWrite>
<outputDirectory>${project.build.directory}/shaded-sources</outputDirectory>
<includes>**/**</includes>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
</build>
build-helper-maven-plugin, кажется, добавляет затененную флягу в проект IntelliJ:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<id>compile</id>
<phase>package</phase>
<goals>
<goal>attach-artifact</goal>
</goals>
<configuration>
<artifacts>
<artifact>
<file>${basedir}/target/<YOUR JAR NAME>-SNAPSHOT.jar</file>
<type>jar</type>
<classifier>optional</classifier>
</artifact>
</artifacts>
</configuration>
</execution>
</executions>
</plugin>
Для получения дополнительной информации см. Https://www.mojohaus.org/build-helper-maven-plugin/attach-artifact-mojo.html.
Лучшим обходным решением кажется: щелкните правой кнопкой мыши на "компонент" проекта шарда → pom.xml в представлении проекта в IntelliJ, выберите "Maven" → "Игнорировать проекты". Затем выполните "Maven" → "Reimport" для проекта pom.xml.