【问题标题】:Creating one jar with all the dependent jars in it创建一个包含所有依赖 jar 的 jar
【发布时间】:2014-01-08 09:31:59
【问题描述】:

我正在尝试创建一个 jar 文件,其中包含所有依赖的 jar 文件。 Maven 创建一个单独的 lib 文件夹并将所有 jar 复制到其中,然后可执行 jar 作为 jar 和 lib 在同一位置工作,但我希望 jar 成为主 jar 的一部分,而不是在 lib 文件夹之外。我该怎么做?

【问题讨论】:

    标签: maven


    【解决方案1】:

    您应该使用Maven Assembly pluginMaven Shade plugin

    事实上,JAR 文件格式本身并不支持在其内部包含依赖项(有一个 20 年前的 RFE 记录了它)。因此,您可以实现您的要求,但这始终是某种解决方法。例如,您必须小心可能的文件名冲突 - 这是 Shade 插件试图解决的问题,Assembly 插件更易于使用,恕我直言,但会继续覆盖文件。

    看看这个示例如何使用程序集插件以及如何处理 DLL:Package Dll in Jar using Maven- single goal

    【讨论】:

    • 我尝试了 shade 插件,但得到了这个,因为我也在使用 dll 来 jar:[错误] 无法执行目标 org.apache.maven.plugins:maven-shade-plugin:2.2:shade (默认)在项目 MIM 上:创建阴影 jar 时出错:打开 zip 文件时出错 C:\Users\adeb.m2\repository\com\aware\nistpack\5.0.4\nistpack-5.0.4.dll -> [帮助 1]请帮忙
    • 我不确定它与 shade 和 DLL 的关系如何,因为 shade 与 java 类本身一起工作。组装可能会更容易,看看:stackoverflow.com/questions/11578903/…
    • @AbhijitDeb 可能会看到stackoverflow.com/questions/20098271/…
    【解决方案2】:
    <build>
        <finalName>MIM</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>com.tsc.Main</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </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>
    
    
        </plugins>
        <pluginManagement>
            <plugins>
                <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
                <plugin>
                    <groupId>org.eclipse.m2e</groupId>
                    <artifactId>lifecycle-mapping</artifactId>
                    <version>1.0.0</version>
                    <configuration>
                        <lifecycleMappingMetadata>
                            <pluginExecutions>
                                <pluginExecution>
                                    <pluginExecutionFilter>
                                        <groupId>
                                            org.apache.maven.plugins
                                        </groupId>
                                        <artifactId>
                                            maven-dependency-plugin
                                        </artifactId>
                                        <versionRange>
                                            [2.1,)
                                        </versionRange>
                                        <goals>
                                            <goal>prepare-package</goal>
                                            <goal>
                                                copy-dependencies
                                            </goal>
                                        </goals>
                                    </pluginExecutionFilter>
                                    <action>
                                        <ignore></ignore>
                                    </action>
                                </pluginExecution>
                            </pluginExecutions>
                        </lifecycleMappingMetadata>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
    

    【讨论】:

      猜你喜欢
      • 2012-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-14
      • 2014-06-08
      • 2014-07-21
      相关资源
      最近更新 更多