为啥依赖项不包含在 JAR 文件中? [复制]

Posted

技术标签:

【中文标题】为啥依赖项不包含在 JAR 文件中? [复制]【英文标题】:Why are the dependencies not included in the JAR file? [duplicate]为什么依赖项不包含在 JAR 文件中? [复制] 【发布时间】:2015-01-27 14:14:27 【问题描述】:

如果我查看 JAR 文件,其中没有依赖项。 我使用 Netbeans 8.0 作为 IDE 和 JDK 8 Update 25。

这是我的 pom.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<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.mycompany</groupId>
    <artifactId>XmppMinimalClient</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
    </properties>

    <build>
      <plugins>
        <plugin>
          <!-- Build an executable JAR -->
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <version>2.4</version>

          <configuration>
            <archive>
              <manifest>
                <mainClass>com.mycompany.xmppminimalclient.XmppMinimalClient</mainClass>
                <addClasspath>true</addClasspath> 
                <addDefaultImplementationEntries>true</addDefaultImplementationEntries> 
                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
              </manifest>
            </archive>
            <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
            </descriptorRefs>
          </configuration>

        <executions>
            <execution>
                <id>make-assembly</id> <!-- this is used for inheritance merges -->
                <phase>package</phase> <!-- bind to the packaging phase -->
            </execution>
        </executions>
        </plugin>
      </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>org.igniterealtime.smack</groupId>
            <artifactId>smack-core</artifactId>
            <version>4.0.5</version>
        </dependency>
        <dependency>
            <groupId>org.igniterealtime.smack</groupId>
            <artifactId>smack-tcp</artifactId>
            <version>4.0.5</version>
        </dependency>
    </dependencies>
</project>

【问题讨论】:

【参考方案1】:

你需要明确表示你想对 Maven 这样做。

http://maven.apache.org/plugins/maven-assembly-plugin/descriptor-refs.html#jar-with-dependencies

还有:

Including dependencies in a jar with Maven

【讨论】:

以上是关于为啥依赖项不包含在 JAR 文件中? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如果使用 jar,则从 jar 中解压缩文件,然后将提取的文件复制到目录

Maven的依赖产生文件,但没jar包,怎么办

放心 IntelliJ IDEA 中的 3.0.3 maven 依赖项不起作用

使 Maven 将依赖项复制到 target/lib

在 Android Gradle 构建中,如何从包含的 jar 文件中排除依赖项?

包 json 依赖项不匹配