maven-dependency-plugin генерирует дубликаты файлов в файле jar-with-dependencies.jar - PullRequest
5 голосов
/ 23 декабря 2011

Я создаю отдельное Java-приложение с Maven, и я включаю зависимости в файл JAR с maven-dependecy-plugin следующим образом:

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.directory}/classes/lib</outputDirectory>
                        <overWriteReleases>false</overWriteReleases>
                        <overWriteSnapshots>false</overWriteSnapshots>
                        <overWriteIfNewer>true</overWriteIfNewer>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <mainClass>theMainClass</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>

         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
                <executions>
                    <execution>
                        <id>create-my-bundle</id>
                            <phase>package</phase>
                                <goals>
                                    <goal>single</goal>
                                </goals>
                     <configuration>
                       <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                       </descriptorRefs>

                     </configuration>
                    </execution>
               </executions>
        </plugin> 

это включает в себя зависимости в сгенерированном файле jar в папке lib, и jar работает и работает нормально, но проблема заключается в другом сгенерированном файле jar appname-1.0-jar-with-dependencies.jar.

ВЫПУСК: Я не уверен, является ли это проблемой или нет, но я заметил в целевой папке в сгенерированном appname-1.0-jar-with-dependencies.jar, что он содержит дубликаты файлов приложений, такие как:

  1. все sql, файлы свойств, xml-файлы существуют дважды.
  2. все файлы классов Java .class существуют дважды.
  3. Есть много файлов Overview.html и license.txt, связанных с зависимостями.

Я не уверен, что это правильно или нет, также мне нужно, чтобы кто-то объяснил мне, какова важность этого сгенерированного jar-файла, так как я не знаком с этим плагином.

пожалуйста, сообщите, спасибо.

1 Ответ

3 голосов
/ 23 декабря 2011

Поскольку вы упомянули jar-with-dependencies , я предполагаю, что вы используете подключаемый модуль maven для сборки артефактов проекта вместе с зависимыми банками в один jar.

Я подозреваю, что артефакты вашего проекта попадают в jar-with-dependencies дважды - из-за свойства useProjectArtifact из dependencySet , которое по умолчанию равно true. Вы можете установить для этого свойства значение true в дескрипторе сборки и посмотреть, решает ли оно вашу проблему.

В приведенном выше конкретном случае плагин для зависимостей maven, похоже, не делает ничего полезного. Плагин сборки maven автоматически упаковывает все свои зависимости в один дистрибутив согласно конфигурации.

Но обратите внимание Проблемы с classpath , если вы создаете исполняемый файл с зависимостями. Вы можете вместо этого создать zip или tar.gz.

Используемая выше конфигурация является настройкой по умолчанию и не позволяет выполнять настройку. Возможно, вы захотите использовать файл дескриптора сборки, в котором вы можете установить указанное выше свойство или другие параметры.

...