我正在尝试关注此链接: http://maven.apache.org/plugins/maven-shade-plugin/examples.html
我是Maven的新手。我试图效仿这个例子,感觉有点过分了。
我能够让Quartz Scheduler使用Spring。我希望能够使用jar文件从命令行运行它。
以下是我使用的类和pom文件的列表。
编辑:
我能够获得一个阴影jar文件。我用过mvn clean install
但是当我尝试从命令行运行它时,我收到以下错误。
C:\Users\SpringExample\target>java -jar SpringExample-1.0-SNA
PSHOT-shaded.jar
Exception in thread "main" java.lang.NoClassDefFoundError: org/sonatype/haven/Ex
odusCli
Caused by: java.lang.ClassNotFoundException: org.sonatype.haven.ExodusCli
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: org.sonatype.haven.ExodusCli. Program will exit.
EDIT2:
我使用此链接在上面的pom中使用了以下内容:
http://seanfreitag.wordpress.com/2011/07/25/create-an-executable-jar-with-dependencies-using-maven/
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<manifestEntries>
<Main-Class>org.sonatype.haven.ExodusCli</Main-Class>
<Build-Number>123</Build-Number>
</manifestEntries>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
...
</project>
答案 0 :(得分:2)
我没有使用过Shade,但我怀疑:
用于调用Shade的pom未显示
显示如何设置Main-Class的Maven示例假定类org.sonatype.haven.HavenCli位于正在组装的jar中的某个位置
你没有这样的课程
您应该将<mainClass>org.sonatype.haven.HavenCli</mainClass>
中的班级名称更改为您要用作主班级的名称
答案 1 :(得分:1)
更新:您需要在jar中的Manifest.mf中指定Main-Class属性。请参阅示例“Shade Plugin,其中Main-Class被添加到MANIFEST.MF”。
-
是的,您应该将插件代码嵌入到您的pom文件中,如下所示
<project>
<!-- Other tags -->
---
<build>
<plugins>
<plugin>
---
</plugin>
</plugins>
</build>`
</project>
您可能已将<plugin>
作为<project>
的直接子项包含在pom文件中。它不起作用。
如果指定了shade插件配置,使用mvn install
(或mvn package
)构建maven项目的常用方法将创建阴影jar。那么,会有两个罐子;原来的罐子和超级罐子。
排除:
通常,超级jar将包含pom中dependencies
jar列表中的所有类。 excludes
指定一组不需要在着色jar中的jar文件。如果你仔细看看这个例子,它会排除junit:junit jar,这意味着junit中的类不会出现在你的超级jar中。
答案 2 :(得分:0)
将以下代码段添加到您的插件中。这应该有帮助。
<artifactSet>
<includes>
<include>org.sonatype.haven.ExodusCli:*</include>
</includes>
</artifactSet>