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



我有一个Maven项目,该项目将Swing客户端构建为带有依赖项的jar.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 坐标。 如果我使用 GUI 项目的 Maven 坐标,它会将 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 .jar那么它本身也会起作用。 jar-with-dependencies.jar必须位于我创建的 .war 文件中的某个位置,以支持 Java Web Start。

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

首先,你想要的是 JAR 文件可供 WAR 文件的用户下载。 将 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>

在这里,我们将您的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>

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

在 webstart 的情况下,您将使用适当的路径配置 JNLP,而不是让用户直接下载 JAR。

如果你也想复制.jnlp文件,就像我的情况一样,你可以使用解压缩目标。这是有效的,因为webstart-maven-plugin可以将jars和jnlp文件打包到zip中。

<execution>
    <id>unpack</id>
    <phase>process-resources</phase>
    <goals>
          <goal>unpack</goal>
    </goals>
    <configuration>
        <artifactItems>
         <artifactItem>
             <groupId>myGroup</groupId>
            <artifactId>myArtifact</artifactId>
            <version>1.0</version>
            <type>zip</type>
            <overWrite>true</overWrite>
            <outputDirectory>${project.build.directory}/webapp-downloads</outputDirectory>
        </artifactItem>
    </artifactItems>
    </configuration>
</execution>

最新更新