On 07/23/2013 07:00 AM, Michael Born wrote:
Hello,
I currently developing an additional component, this component need 3rd
party jars to run.
I have included my project in Eclipse, where I stored the jars in the
build path.
To create the jar with Maven works without error.
Whenever I install my component in xwiki.basedir {} / WEB-INF/lib, and
then try to execute this in Velocity in a page I get the following error
displayed:
Caused by: org.apache.velocity.exception.MethodInvocationException:
Invocation of method 'createProjectPages' in class
com.acme.internal.BlueAntComponentScriptService threw exception
java.lang.NoClassDefFoundError:
org/apache/commons/discovery/tools/DiscoverSingleton at xwiki:BlueAnt
Space.WebHome[line 2, column 19]
at
org.apache.velocity.runtime.parser.node.ASTMethod.handleInvocationException(ASTMethod.java:261)
at
org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:187)
at
org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:280)
at
org.apache.velocity.runtime.parser.node.ASTReference.render(ASTReference.java:369)
at
org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:342)
at
org.xwiki.velocity.internal.DefaultVelocityEngine.evaluate(DefaultVelocityEngine.java:228)
... 106 more
Caused by: java.lang.NoClassDefFoundError:
org/apache/commons/discovery/tools/DiscoverSingleton
at
org.apache.axis.components.logger.LogFactory$1.run(LogFactory.java:45)
at java.security.AccessController.doPrivileged(Native Method)
at
org.apache.axis.components.logger.LogFactory.getLogFactory(LogFactory.java:41)
at
org.apache.axis.components.logger.LogFactory.<clinit>(LogFactory.java:33)
at org.apache.axis.handlers.BasicHandler.<clinit>(BasicHandler.java:43)
at org.apache.axis.client.Service.getAxisClient(Service.java:104)
at org.apache.axis.client.Service.<init>(Service.java:113)
at
net.proventis.axis.blueant.BaseServiceLocator.<init>(BaseServiceLocator.java:12)
at com.acme.internal.ClientTest.<init>(ClientTest.java:41)
at
com.acme.internal.BlueAntDefaultComponent.createProjectPages(BlueAntDefaultComponent.java:73)
at
com.acme.internal.BlueAntComponentScriptService.createProjectPages(BlueAntComponentScriptService.java:50)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at
org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.doInvoke(UberspectImpl.java:395)
at
org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.invoke(UberspectImpl.java:384)
at
org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:173)
... 110 more
Caused by: java.lang.ClassNotFoundException:
org.apache.commons.discovery.tools.DiscoverSingleton
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1516)
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1361)
... 128 more
I've tried to make the jars available via the command:
mvn install:install-file -Dfile=src\main\resources\axis.jar
-DgroupId=axis -DartifactId=axis -Dversion=1 -Dpackaging=jar
...
...
...
But this has not helped.
My pom file looks like:
<?xml version="1.0" encoding="UTF-8"?>
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.xwiki.commons</groupId>
<artifactId>xwiki-commons-component-archetype</artifactId>
<version>3.3-milestone-2</version>
<name>XWiki BlueAnt Component</name>
<description>XWiki BlueAnt Component</description>
<properties>
<platform.core.version>3.3-milestone-2</platform.core.version>
</properties>
<build>
<plugins>
<!-- plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<compilerVersion>1.5</compilerVersion>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.xwiki.commons</groupId>
<artifactId>xwiki-commons-component-default</artifactId>
<version>${platform.core.version}</version>
</dependency>
<!-- Only needed if some of the component's APIs must be made
visible to scripting in wiki pages -->
<dependency>
<groupId>org.xwiki.commons</groupId>
<artifactId>xwiki-commons-script</artifactId>
<version>${platform.core.version}</version>
</dependency>
<!-- Testing dependencies -->
<dependency>
<groupId>org.xwiki.commons</groupId>
<artifactId>xwiki-commons-test</artifactId>
<version>${platform.core.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>axis</groupId>
<artifactId>axis</artifactId>
<version>1.0</version>
<type>jar</type>
<scope>system</scope>
<systemPath>D:\Entwicklung\JAVA\Maven\TestProject\example\src\main\resources\axis.jar</systemPath>
</dependency>
... and for all other third party jars
</dependencies>
</project>
Can anyone help a desperate trainee? :)
Hi Michael,
First of all, the error doesn't show up because of how the build is set
up, but because by default dependencies aren't included in the generated
jar.
So, it is not enough to just copy your project's jar to WEB-INF/lib, you
need to copy it along with all its dependencies. To check what
dependencies are needed by a project, just execute:
mvn dependency:tree
If a dependency already exists in WEB-INF/lib, you don't have to copy
it, even if it has a different version. You can't use two different
versions of the same class anyway, so you'll cause more problems if you do.
Second, you should not use system dependencies. Unless you're using a
very unpopular library, most of the open source projects are available
on the central maven repository. Use
http://search.maven.org/ to look
for their exact coordinates. Searching for "axis" shows a bunch of
results, including axis:axis (1.4 being the latest version) and
axis2:axis2, in case you want to upgrade.
http://search.maven.org/#artifactdetails|axis|axis|1.4|jar
--
Sergiu Dumitriu
http://purl.org/net/sergiu