Maven создает исполняемый файл JAR с включенными зависимостями - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь создать исполняемый файл JAR с необходимыми зависимостями. Я был успешным, но зависимости распакованы в моей банке. Я хотел бы создать версию, в которой зависимости все еще упакованы в свои ретроспективные jar-файлы в папке lib внутри моего jar-файла и на которые будут ссылаться в пути к классу MANIFEST.MF.

Вот что у меня есть в настоящее время:

...
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.2.0</version>
    <configuration>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <archive>
            <manifest>
                <mainClass>com.example.Main</mainClass>
            </manifest>
        </archive>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>
...

Я безуспешно пытался найти параметры для maven-assembly-plugin, а также пытался использовать maven-dependency-plugin с maven-jar-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}/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>
    <version>3.2.0</version>
    <configuration>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
                <classpathPrefix>lib/</classpathPrefix>
                <mainClass>com.example.Main</mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>

Вывод из maven выглядит многообещающе, но, увы, нет радости:

[INFO] Scanning for projects...
[INFO]
[INFO] -------------------------< com.example:sample >-------------------------
[INFO] Building sample 2.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ sample ---
[INFO] Deleting /Users/me/sample/target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ sample ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 2 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ sample ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 2 source files to /Users/me/sample/target/classes
[INFO] /Users/me/sample/src/main/java/com/example/Main.java: /Users/me/sample/src/main/java/com/example/Main.java uses or overrides a deprecated API.
[INFO] /Users/me/sample/src/main/java/com/example/Main.java: Recompile with -Xlint:deprecation for details.
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ sample ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /Users/me/sample/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ sample ---
[INFO] Changes detected - recompiling the module!
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ sample ---
[INFO]
[INFO] --- maven-dependency-plugin:2.8:copy-dependencies (copy-dependencies) @ sample ---
[INFO] Copying aws-java-sdk-kms-1.11.252.jar to /Users/me/sample/target/lib/aws-java-sdk-kms-1.11.252.jar
[INFO] Copying log4j-1.2.17.jar to /Users/me/sample/target/lib/log4j-1.2.17.jar
...
[INFO] Copying commons-io-2.6.jar to /Users/me/sample/target/lib/commons-io-2.6.jar
[INFO]
[INFO] --- maven-jar-plugin:3.2.0:jar (default-jar) @ sample ---
[INFO] Building jar: /Users/me/sample/target/sample-2.0.0.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.928 s
[INFO] Finished at: 2020-04-28T18:16:02-04:00
[INFO] ------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

» unzip -l /Users/me/sample/target/sample-2.0.0.jar
Archive:  /Users/me/sample/target/sample-2.0.0.jar
  Length      Date    Time    Name
---------  ---------- -----   ----
      601  04-28-2020 18:16   META-INF/MANIFEST.MF
        0  04-28-2020 18:16   META-INF/
        0  04-28-2020 18:16   com/
        0  04-28-2020 18:16   com/example/
        0  04-28-2020 18:16   com/example/util/
        0  04-28-2020 18:16   META-INF/maven/
        0  04-28-2020 18:16   META-INF/maven/com.example/
        0  04-28-2020 18:16   META-INF/maven/com.example/sample/
      266  04-28-2020 18:16   Example.properties
      809  04-28-2020 18:16   log4j.xml
     2289  04-28-2020 18:16   com/example/util/AppProperties.class
    13735  04-28-2020 18:16   com/example/Example.class
     3686  04-28-2020 18:15   META-INF/maven/com.example/sample/pom.xml
       52  04-28-2020 18:16   META-INF/maven/com.example/sample/pom.properties
---------                     -------
    21438                     14 files
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...