使用 Maven 创建一个包含 JNLP 的 jar-with-dependencies.jar 的 .war 文件

Dea*_*lze 5 java jnlp java-web-start maven

我有一个 Maven 项目,它将 Swing 客户端构建为 jar-with-dependencies.jar 文件。我想使用 Java Web Start 来分发这个 my.gui-0.1.0-jar-with-dependencies.jar 文件。为此,我创建了一个单独的 Maven 项目,该项目使用 JNLP 工件构建了一个 .war 文件。我需要在这个 .war 文件中包含 my.gui-0.1.0-jar-with-dependencies.jar。

我无法确定 jar-with-dependencies.jar 文件的 Maven 坐标。如果我将 Maven 坐标用于 GUI 项目,它会将 GUI 项目的依赖 .jar 文件放在 WEB-INF/lib 中,这不是我想要的。我需要在 .war 文件中包含 my.gui-0.1.0-jar-with-dependencies.jar 文件本身。(我想它可能在 WEB-INF/lib 中。)

我如何告诉 Maven 依赖项是 jar-with-dependencies.jar 文件本身?

如果除了告诉 Maven 包含 jar-with-dependencies.jar 本身的机制之外,还有另一种方式也可以工作。jar-with-dependencies.jar 必须位于我为支持 Java Web Start 而创建的 .war 文件中。

我知道有一个 Maven Webstart 插件,但这看起来像是一场噩梦,所以我只是自己构建一个 .war 文件,其中包含必要的 JNLP 工件。

pru*_*nge 4

首先,您希望WAR 文件的用户可以下载 JAR 文件将 WEB-INF/lib 中的文件作为 WAR 项目的标准依赖项包含进来并不是您想要的。您最可能想要的是将 JAR 放在 WAR 中的不同目录中(例如/downloads)。

要在 Maven 中实现此目的,您可以使用Maven 依赖项插件

1:使用依赖插件将JAR 文件复制到临时构建目录。

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>2.4</version>
        <executions>
          <execution>
            <id>copy</id>
            <phase>generate-resources</phase>
            <goals>
              <goal>copy</goal>
            </goals>
            <configuration>
              <artifactItems>
                <artifactItem>
                  <groupId>my.group</groupId>
                  <artifactId>myartifact</artifactId>
                  <version>1.0</version>
                  <type>jar</type>
                  <overWrite>false</overWrite>
                  <outputDirectory>${project.build.directory}/webapp-downloads</outputDirectory>
                  <destFileName>myartifact.jar</destFileName>
                </artifactItem>
              </artifactItems>
            </configuration>
          </execution>
        </executions>
      </plugin>
Run Code Online (Sandbox Code Playgroud)

在这里,我们将您的 JAR 文件复制到 ${project.build.directory/webapp-downloads 目录

2:配置WAR插件以包含依赖插件生成的资源。

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.2</version>
        <configuration>
          <webResources>
            <resource>                  
              <directory>${project.build.directory/webapp-downloads</directory>
              <targetPath>downloads</targetPath>
            </resource>
          </webResources>
        </configuration>
      </plugin>
Run Code Online (Sandbox Code Playgroud)

这将导致 JAR 文件被捆绑在你的 WARdownloads目录下。然后,用户可以通过访问 /downloads/myartifact.jar 来下载它。

对于 webstart,您可以使用适当的路径配置 JNLP,而不是让用户直接下载 JAR。