3

我可能需要这样的问题

Maven 构建具有依赖项的程序集

maven 程序集创建具有依赖项和类路径的 jar

如何执行可执行 jar?

命令行中的 java -jar 在线程“main”java.lang.NoClassDefFoundError 中给了我异常:org/apache/log4j/Logger

我在我的目标目录和 lib 目录中创建了 executable.jar,所有依赖项 jar 在 /lib 目录下。

这是我的 pom.xml 的片段。我应该改变什么?

</dependencies> 
 <dependency>
<groupId><gId></groupId>
<artifactId><aId></artifactId>
<version><v></version>
</dependency>
<dependency>
<groupId>gI2</groupId>
<artifactId>aI2</artifactId>
<version>v</version>
</dependency>
</dependencies>
<build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.proj.app</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>
        </plugins>
    </build>
4

3 回答 3

3

使用 Maven Shade 插件

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>1.6</version>
    <configuration>
        <createDependencyReducedPom>true</createDependencyReducedPom>
        <filters>
            <filter>
                <artifact>*:*</artifact>
                <excludes>
                    <exclude>META-INF/*.SF</exclude>
                    <exclude>META-INF/*.DSA</exclude>
                    <exclude>META-INF/*.RSA</exclude>
                </excludes>
            </filter>
        </filters>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass><Your main class here></mainClass>
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>

这会将所有依赖项包含在一个 jar 中,并将自动将主类添加到您的 Manifest 文件中。

确保您运行“包”目标。

于 2013-10-08T18:55:15.257 回答
0

您的发行版需要包含您在应用程序中使用的库的所有 JAR 文件。程序集插件正是为满足该要求而设计的。

我通常使用组装插件来创建一个包含整个发行版的 ZIP 文件。那是我自己的应用程序的 JAR 文件、所有必需的配置文件,当然还有所有库 JAR。

此外,您的可执行 JAR 文件需要适当的清单文件。也就是说,它需要一个正确的主类条目和一个类路径。

于 2013-10-08T12:11:16.133 回答
0

您可以使用App Assembler插件来做到这一点。它将依赖项复制到一个文件夹并创建快捷方式来执行您的主类。

于 2013-10-09T08:32:39.503 回答