5

我有一个 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 坐标。如果我为 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-with-dependencies.jar 本身的机制之外还有其他方法也可以。jar-with-dependencies.jar 必须位于我正在创建以支持 Java Web Start 的 .war 文件中的某个位置。

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

4

2 回答 2

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>

在这里,我们将您的 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 文件捆绑在您的 WARdownloads目录下。然后,用户可以通过转到 /downloads/myartifact.jar 来下载它。

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

于 2012-04-17T03:35:39.867 回答
0

如果您也想复制 .jnlp 文件,就像我的情况一样,您可以使用 unpack 目标。这是因为 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>
于 2016-10-06T10:19:53.333 回答