我在项目中使用JSoup,并在POM
文件中声明了依赖项。它可以很好地编译并且也可以很好地运行,但是仅当我使用jar with all dependencies
和时,将依赖项的范围更改为compiled
。
如果将范围更改为provided
,则仍然可以编译,但不能运行它。它给了我ClassNotFoundException
。我在classpath
和path
变量中都包含了必要的JAR文件,但我仍然面临着这个问题。
我可以用编译选项工作,但它的真正irking我在我的脑海里,为什么我不能把它与所提供的选项运行,我就 真的很 感激,如果有人可以帮助我弄清楚为什么。
以下是我看到的错误:
java.lang.NoClassDefFoundError: Lorg/jsoup/nodes/Document;
at java.lang.Class.getDeclaredFields0(Native Method)
at java.lang.Class.privateGetDeclaredFields(Class.java:2300)
at java.lang.Class.getDeclaredField(Class.java:1882)
at java.io.ObjectStreamClass.getDeclaredSUID(ObjectStreamClass.java:1605)
at java.io.ObjectStreamClass.access$700(ObjectStreamClass.java:50)
at java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:423)
at java.security.AccessController.doPrivileged(Native Method)
at java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:411)
at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:308)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1114)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330)
at backtype.storm.utils.Utils.serialize(Utils.java:52)
at backtype.storm.topology.TopologyBuilder.createTopology(TopologyBuilder.java:94)
at com.yahoo.amit.wordstorm.WordStormTopology.main(WordStormTopology.java:25)
Caused by: java.lang.ClassNotFoundException: org.jsoup.nodes.Document
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 14 more
以下是我的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>com.yahoo.amit.wordstorm</groupId>
<artifactId>wordstorm</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>wordstorm</name>
<url>http://maven.apache.org</url>
<repositories>
<repository>
<id>clojars.org</id>
<url>http://clojars.org/repo</url>
</repository>
</repositories>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>storm</groupId>
<artifactId>storm</artifactId>
<version>0.8.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.7.2</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!--
bind the maven-assembly-plugin to the package phase
this will create a jar file without the storm dependencies
suitable for deployment to a cluster.
-->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass></mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
以下是我的系统变量:
echo $PATH /Users/programmerman/Summer Project/apache-maven-3.0.5/bin/:/Users/programmerman/Summer
Project/storm-0.8.2/bin/:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/Users/programmerman/Summer
Project/CLASSPATH/jsoup-1.7.2.jar:/Users/programmerman/Summer
Project/CLASSPATH/*echo $CLASSPATH /Users/programmerman/Summer Project/storm-0.8.2/storm-0.8.2.jar:/Users/programmerman/Summer Project/storm-0.8.2/lib/*:/Users/programmerman/Summer
Project/storm-0.8.2/conf/storm.yaml:/Users/programmerman/SummerProject/storm-
starter-masterPOM/target/storm-starter-0.0.1-SNAPSHOT-jar-with-
dependencies.jar:/Users/programmerman/Summer
Project/CLASSPATH/jsoup-1.7.2.jar:/Users/programmerman/Summer
Project/CLASSPATH/*
这既是关于Maven的问题,也是关于Storm及其部署模型的问题。您必须检查该storm
命令的实际作用。首先,它实际上是一个最终调用的Python脚本java
。
如果您看一下函数get_classpath(extrajars)
,您会注意到它根本不使用$CLASSPATH
evironment变量。相反,它将加载核心Storm
jar和lib/
相对于工作目录的目录下的所有jar,以及以下目录中的配置文件~/.storm
(您会发现忽略$CLASSPATH
在许多Javahtml" target="_blank">应用程序中非常普遍。通常,“启动脚本”所做的第一件事是覆盖CLASSPATH或根本不使用它。这是为了防止导致未知/不支持/早期版本的jar。应用程序中的问题)。
至于在将jsoup声明为“提供”时您的应用程序失败:当将jar声明为提供的依赖项时,它将不会打包在“带有依赖项的jar”程序集中。请参见以下问题以获取良好的解释:Maven范围编译与JAR打包所提供的区别
tl; dr的解释是,编译范围是随uber-jar一起提供的,但前提是没有,因为预期它是由部署到的容器“提供”的。通常,“容器”是Java
Web服务器,例如Tomcat(因此,您永远不必随Java一起发布JSP或Servlet
jar)。在这种情况下,您希望“提供”类的“容器”是Storm。但是,Storm不提供jsoup,因此会出错。
编译范围类仍需要随应用程序一起提供,因为您的应用程序将实例化/使用接口,枚举等。
我的建议是只声明jsoup“编译”范围并继续。替代方法是编写您自己的定制部署脚本和/或程序集,将jsoup置于其下lib/
-基本上是同一件事。
添加firestore依赖项后构建失败,错误如下:这只发生在添加firestore依赖项后,当我删除它时,应用程序构建得很好。 失败:生成失败,出现异常。 梯度包装属性: 和我的颤振依赖:
我试图通过将< code > implementation ' org . Gurux:Gurux . serial . android:1 . 0 . 1 ' 添加到我的build.gradle-file来将Gurux添加到我的Android项目中,但是我得到一个错误消息,说“Manifest merge failed:Android:exported需要显式指定用于。当相应的组件定义了意图过滤
我被添加了谷歌云依赖项 但我的生成失败,出现以下错误 我尝试禁用批注处理器 我收到以下错误
我们想使用谷歌提供的最新的材料设计界面元素。因此,我在我们的项目gradle文件中添加了。但是从那以后,我得到了以下错误。 清单合并失败:属性application@appComponentFactory值=(androidx.core.app.CoreComponentFactory)来自[androidx.core:core:1.0.0-beta01]AndroidManifest。xml:2
npm是否有安装依赖作为对等依赖的选项,如yarn选项,而不是手动添加它例如: 感谢@Broncha,更新问题的更多说明 问题是如何向项目添加对等依赖。那就是 将依赖项添加到package.json中的“dependencies”中, 如何安装将其添加到package.json?中的“对等依赖”的依赖项
问题内容: 我最近安装了Anaconda的64位Linux版本(1.8.0-Linux-x86_64)。安装似乎工作正常: 但是,如果我尝试任何conda命令,则会收到错误消息: 安装位于我的用户目录(〜/ anaconda)下。我已经验证$ PATH包含〜/ anaconda / bin。$ PYTHONPATH也设置为〜/ anaconda / lib。 对“ conda”命令出什么问题有任何
错误:失败:生成失败,出现异常。*错误:任务“:app:ProcessDebugResources”执行失败。