Невозможно создать Apache POI fat jar со всеми зависимостями - PullRequest
0 голосов
/ 15 апреля 2019

Привет, я использую две версии Apache POI jar в своем проекте. Поэтому я пытаюсь закрасить одну jar со всеми зависимостями, используя maven shaded plugin. Но когда я строю свой проект, он становится успешным, но когда я импортирую затененный jar в мой код, он показывает ошибку, которую (все методы внутри затененного jar) не найдено. Может ли кто-нибудь помочь мне создать затененную баночку POI.

Ниже приведен мой файл POM.xml, который я использую для создания Apache POI с затенением

<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>com.divas</groupId>
    <artifactId>poi-conflicting-jarsfix</artifactId>
    <version>1.0-SNAPSHOT</version>
    <build>
        <sourceDirectory>src/main/scala</sourceDirectory>
        <testSourceDirectory>src/test/scala</testSourceDirectory>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.6.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.2.1</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>org.apache</mainClass>
                                </transformer>
                            </transformers>
                            <filters>
                                <filter>
                                    <artifact>*:*</artifact>
                                    <!-- <includes> <include>com.hierynomus.**</include> <include>net.engio.**</include> 
                                        <include>org.bouncycastle.**</include> </includes> -->
                                    <excludes>
                                        <exclude>META-INF/maven/**</exclude>
                                        <exclude>META-INF/*.SF</exclude>
                                        <exclude>META-INF/*.DSA</exclude>
                                        <exclude>META-INF/*.RSA</exclude>
                                    </excludes>
                                </filter>
                            </filters>
                            <relocations>
                                <relocation>
                                    <pattern></pattern>
                                    <shadedPattern>shaded.</shadedPattern>
                                </relocation>
                            </relocations>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    <dependencies>

<dependency>
    <artifactId>poi</artifactId>
    <version>4.0.0</version>
    <groupId>org.apache.poi</groupId>
</dependency>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-examples</artifactId>
    <version>4.0.0</version>
</dependency>

 <dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-excelant</artifactId>
    <version>4.0.0</version>
</dependency>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.0.0</version>
</dependency>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml-schemas</artifactId>
    <version>4.0.0</version>
</dependency>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-scratchpad</artifactId>
    <version>4.0.0</version>
</dependency>

<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.10</version>
</dependency>

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-collections4</artifactId>
    <version>4.2</version>
</dependency>

<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
</dependency>

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>


    </dependencies>
</project>

После создания этой заштрихованной банки я добавляю ниже зависимости в моем проекте pom.xml

<dependency>
    <groupId>com.divas</groupId>
    <artifactId>poi-conflicting-jarsfix</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

После добавления приведенной ниже зависимости я импортирую ниже строки

import shaded.org.apache.poi.ss.usermodel.Workbook

вместо

import org.apache.poi.ss.usermodel.Workbook

но мой код выдает исключение под названием Workbook, который не является членом shaded.org.apache.poi.ss.usermodel

Тем не менее, он работает нормально без затененной банки

...