我有一个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必须位于我正在创建的.war文件中以支持Java Web Start。
我知道有一个Maven Webstart插件,但是that looks like a nightmare所以我只是用自己必要的JNLP工件构建一个.war文件。
答案 0 :(得分:4)
首先,您想要的是WAR文件的用户可以下载的JAR文件。将文件包含在WEB-INF / lib中作为WAR项目的标准依赖项并不是您想要的。您最想要的是将JAR放在WAR的不同目录中(例如/downloads
)。
要在Maven中实现此目的,您可以使用Maven Dependency Plugin。
1:使用依赖插件{J}文件copy到临时构建目录。
<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文件捆绑在downloads
目录下的WAR中。然后,用户可以通过转至/downloads/myartifact.jar下载它来下载它。
对于webstart,您可以使用适当的路径配置JNLP,而不是让用户直接下载JAR。
答案 1 :(得分:0)
如果你想复制.jnlp文件,就像我的情况一样,你可以使用解包目标。这是因为webstart-maven-plugin可以将jar和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>