This is a question about Maven as a Storm and its deployment model. You should check what the storm command does . First of all, this is actually a Python script, which eventually calls java .
If you look at the get_classpath(extrajars) function, you will notice that it does not use the $CLASSPATH evironment variable at all. Rather, it loads the Storm core and any banks that you have in the lib/ directory relative to your working directory, as well as the configuration files in the ~/.storm
(You will find that ignoring $CLASSPATH very common in many Java applications. Usually the first thing that a “script run” does is to overwrite CLASSPATH or not to use it at all. This is to prevent unknown / unsupported / earlier versions of your jars due to problems in your application).
As for your application, when jsoup is declared "provided": when you declare a bank as a provided dependency, it will not be packaged in the "jar with dependencies" assembly. See this question for a good explanation: The difference between maven scope compilation and provided for JAR packaging
Explanation tl; dr is that the compilation area comes with your uber-jar, provided that the area does not exist, since it must be "provided" by the container into which you are deploying. Typically, a “container” is a Java web server such as Tomcat (therefore, you will never have to send JSPs or servlets with your Java web applications). In this case, the “container” that you expect to provide is Storm. However, jsoup is not provided by Storm, hence your mistake.
Warehouses of compilation classes should still be sent along with your application, because your application will create / use interfaces, enumerations, etc.
My recommendation is to simply declare the jsoup scope to “compile” and move on. An alternative would be to write your own individual script deployment and / or assembly that puts jsoup under lib/ - essentially the same thing at the end.
source share