ClassNotFoundException:javax.xml.ws.Endpoint 尽管具有正确的(?)maven 依赖性并且仅在 CLI 中
ClassNotFoundException: javax.xml.ws.Endpoint despite having the correct(?) maven dependency and only in CLI
我在使 Web 服务重新联机时遇到问题。直到现在它还不是一个 Maven 项目,但我决定继续使用 Maven 依赖项来完善它。在此之前,所有依赖项都是手动复制的。所以我的 pom.xml 看起来像这样:
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.iifleuchten.auth.webservice</groupId>
<artifactId>AuthService</artifactId>
<version>0.9</version>
<name>AuthService</name>
<properties>
<maven.compiler.source>1.6</maven.compiler.source>
<maven.compiler.target>1.6</maven.compiler.target>
</properties>
<dependencies>
<!-- jax-ws maven dependency -->
<dependency>
<groupId>javax.xml.ws</groupId>
<artifactId>jaxws-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>2.1.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.jws/javax.jws-api -->
<dependency>
<groupId>javax.jws</groupId>
<artifactId>javax.jws-api</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.messaging.saaj</groupId>
<artifactId>saaj-impl</artifactId>
<version>1.5.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<mainClass>com.iifleuchten.auth.webservice.AuthPublisher</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
</project>
我用的是eclipse,我可以运行eclipse里面的webservice。它工作并且服务可用(使用同一项目中的另一个小程序测试,它调用本地网络服务)虽然我在 运行 连接服务时收到警告:
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.sun.xml.bind.v2.runtime.reflect.opt.Injector (file:/home/manoca/.m2/repository/com/sun/xml/bind/jaxb-impl/2.1.6/jaxb-impl-2.1.6.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int)
WARNING: Please consider reporting this to the maintainers of com.sun.xml.bind.v2.runtime.reflect.opt.Injector
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
当我通过 eclipse 上下文菜单执行 maven 安装时,构建工作正常并且 jar 被创建。但是,当像 java -jar AuthService.jar 这样调用它时,这个 jar 在 cli 中不起作用。我在那里收到 class not found 异常。他找不到端点 class:
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/ws/Endpoint
这是它偶然发现的代码:
Endpoint.publish("http://0.0.0.0:7779/ws/auth", authImpl);
我认为来自 javax.jws 包的其他 class 确实有效,因为 WebService 内容的所有实现和相应的注释都应该在 Endpoint.publish 这不会导致任何异常?长话短说:这是我第一次与 Maven 相关的实验,几个小时后,我真的不知道该怎么做。非常感谢任何建议 ;)
非常感谢您的提示。我现在确实开始更加了解整个交易。这个 link 确实有一些很好的信息,虽然我一开始只是愚蠢的:
https://medium.com/@randilfernando/when-to-use-maven-jar-maven-assembly-or-maven-shade-ffc3f76ba7a6
我在使 Web 服务重新联机时遇到问题。直到现在它还不是一个 Maven 项目,但我决定继续使用 Maven 依赖项来完善它。在此之前,所有依赖项都是手动复制的。所以我的 pom.xml 看起来像这样:
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.iifleuchten.auth.webservice</groupId>
<artifactId>AuthService</artifactId>
<version>0.9</version>
<name>AuthService</name>
<properties>
<maven.compiler.source>1.6</maven.compiler.source>
<maven.compiler.target>1.6</maven.compiler.target>
</properties>
<dependencies>
<!-- jax-ws maven dependency -->
<dependency>
<groupId>javax.xml.ws</groupId>
<artifactId>jaxws-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>2.1.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.jws/javax.jws-api -->
<dependency>
<groupId>javax.jws</groupId>
<artifactId>javax.jws-api</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.messaging.saaj</groupId>
<artifactId>saaj-impl</artifactId>
<version>1.5.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<mainClass>com.iifleuchten.auth.webservice.AuthPublisher</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
</project>
我用的是eclipse,我可以运行eclipse里面的webservice。它工作并且服务可用(使用同一项目中的另一个小程序测试,它调用本地网络服务)虽然我在 运行 连接服务时收到警告:
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.sun.xml.bind.v2.runtime.reflect.opt.Injector (file:/home/manoca/.m2/repository/com/sun/xml/bind/jaxb-impl/2.1.6/jaxb-impl-2.1.6.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int)
WARNING: Please consider reporting this to the maintainers of com.sun.xml.bind.v2.runtime.reflect.opt.Injector
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
当我通过 eclipse 上下文菜单执行 maven 安装时,构建工作正常并且 jar 被创建。但是,当像 java -jar AuthService.jar 这样调用它时,这个 jar 在 cli 中不起作用。我在那里收到 class not found 异常。他找不到端点 class:
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/ws/Endpoint
这是它偶然发现的代码:
Endpoint.publish("http://0.0.0.0:7779/ws/auth", authImpl);
我认为来自 javax.jws 包的其他 class 确实有效,因为 WebService 内容的所有实现和相应的注释都应该在 Endpoint.publish 这不会导致任何异常?长话短说:这是我第一次与 Maven 相关的实验,几个小时后,我真的不知道该怎么做。非常感谢任何建议 ;)
非常感谢您的提示。我现在确实开始更加了解整个交易。这个 link 确实有一些很好的信息,虽然我一开始只是愚蠢的: https://medium.com/@randilfernando/when-to-use-maven-jar-maven-assembly-or-maven-shade-ffc3f76ba7a6