我有一个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 依赖插件。
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>