使用Maven构建可执行jar

时间:2018-08-06 22:30:34

标签: java maven maven-3

我刚完成我的第一个应用程序,现在我想创建一个可执行jar,可以将其发送给其他人,以便他们可以使用我编写的应用程序。

我可能会完全偏离路线。如果是这样,请告诉我我在做什么错。

我在命令提示符(cmd)中运行以下命令:mvn clean package。这不会给我任何错误。

当我尝试使用以下程序运行应用程序时:java -jar AppName.jar。它执行但在运行时给出以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: net/lingala/zip4j/exception/ZipException
        at CompressedFileOpener.CompressedFileOpener.CompressedOpenerFactory.getOpener(CompressedOpenerFactory.java:12)
        at CompressedFileOpener.CompressedFileOpener.App.main(App.java:15)
Caused by: java.lang.ClassNotFoundException: net.lingala.zip4j.exception.ZipException
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 2 more

我的pom.xml文件如下:

<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>CompressedFileOpener</groupId>
  <artifactId>CompressedFileOpener</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>CompressedFileOpener</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>net.lingala.zip4j</groupId>
      <artifactId>zip4j</artifactId>
      <version>1.3.2</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.0</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
        <plugin>
          <!-- Build an executable JAR -->
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <version>3.1.0</version>
          <configuration>
            <archive>
              <manifest>
                <addClasspath>true</addClasspath>
                <classpathPrefix>lib/</classpathPrefix>
                <mainClass>CompressedFileOpener.CompressedFileOpener.App</mainClass>
              </manifest>
            </archive>
          </configuration>
        </plugin>
    </plugins>
  </build>
</project>

编辑: 我设法通过使用本文下方的评论部分并搜索胖罐来解决问题。

将以下内容添加到pom.xml文件的构建路径中,创建了一个包含所有依赖项的jar。

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <archive>
                  <manifest>
                    <mainClass>CompressedFileOpener.CompressedFileOpener.App</mainClass>
                  </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>

            </configuration>
            <executions>
                <execution>
                    <id>assemble-all</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

0 个答案:

没有答案