该应用程序是一个使用NetBeans Payara Micro插件创建的世界:它仅包含index.html和一个编写“ hello world”的主类。
我在POM中添加了一个依赖项,以检查外部库是否正确处理。我不想要一个超大罐子,所以我的POM将库文件放在/lib
文件夹内的/target
文件夹中
我在NetBeans中构建应用程序,然后在/target
文件夹中打开一个shell,并使用以下命令进行部署:
java -jar ../payara-micro-5.183.jar myApp.war --addLibs lib/
(在this doc on adding jar files in deployment之后)
服务器启动,应用程序部署,但是缺少外部库:
PWC6351: In TLD scanning, the supplied resource file:/C:/Users/LEVALL~1/AppData/Local/Temp/payaramicro-rt8447922723645389161tmp/applications/lib/utils-1.0.jar does not exist
java.io.FileNotFoundException: C:\Users\LEVALL~1\AppData\Local\Temp\payaramicro-rt8447922723645389161tmp\applications\lib\utils-1.0.jar (Le chemin dÆaccÞs spÚcifiÚ est introuvable)
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(Unknown Source)
at java.util.zip.ZipFile.<init>(Unknown Source)
at java.util.jar.JarFile.<init>(Unknown Source)
供参考的POM:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>net.clementlevallois</groupId>
<artifactId>qof-back-email</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>qof-back-email</name>
<properties>
<endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<version.javaee>8.0</version.javaee>
<version.payara>5.183</version.payara>
<version.microprofile>2.0.1</version.microprofile>
</properties>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>utils</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>${version.javaee}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.eclipse.microprofile</groupId>
<artifactId>microprofile</artifactId>
<version>${version.microprofile}</version>
<scope>provided</scope>
<type>pom</type>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<packagingExcludes>WEB-INF/lib/*.jar</packagingExcludes>
<failOnMissingWebXml>false</failOnMissingWebXml>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>net.clementlevallois.qof.back.email.Controller</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
答案 0 :(得分:1)
您需要在WAR插件的pom.xml文件中删除addClasspath
配置。然后,您对--addLibs
的命令将起作用。
您在WAR内清单中的当前配置指示在WAR所在的文件夹中搜索JAR。这不适用于Payara Micro,因为WAR文件在部署之前先被复制到一个临时文件夹中。由于JAR不在该文件夹中,因此找不到它们。
您需要构建一个没有在MANIFEST中指定类路径的WAR文件,然后仅使用--addLibs
参数来提供其他JAR。
因此,如果您只是从pom.xml中删除以下内容,则所有功能都应起作用:
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>net.clementlevallois.qof.back.email.Controller</mainClass>
</manifest>
</archive>