4

我正在尝试关注此链接: http ://maven.apache.org/plugins/maven-shade-plugin/examples.html

我是Maven的新手。试图效仿这个例子,我觉得有点不够深入。

我能够让 Quartz Scheduler 开始使用 Spring。我希望能够使用 jar 文件从命令行运行它。

这是我使用的类和 pom 文件的列表。

阴影maven插件

编辑:

我能够得到一个阴影 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.

编辑2:

我使用此链接在上面的 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>
4

3 回答 3

2

我没有使用过Shade,但我怀疑:

  • 您用来调用 Shade 的 pom 未显示

  • 显示如何设置 Main-Class 的 Maven 示例假定类 org.sonatype.haven.HavenCli 位于正在组装的 jar 中的某个位置

  • 你没有这样的课

  • 您应该将您的类名更改为<mainClass>org.sonatype.haven.HavenCli</mainClass>您想用作主类的任何名称

于 2011-09-09T19:56:41.940 回答
1

更新:您需要在 jar 的 Manifest.mf 中指定 Main-Class 属性。请参阅示例“将主类添加到 MANIFEST.MF 的 Shade 插件”。

--

是的,您应该将插件代码嵌入到您的 pom 文件中,如下所示

<project>
       <!-- Other tags -->
        ---
    <build>
      <plugins>
        <plugin>
           ---
        </plugin>
      </plugins>
    </build>`
</project>

您可能在 pom 文件中包含了<plugin>的直接子级。<project>它不起作用。

如果指定了 shade 插件配置,通常使用mvn install(or )构建 maven 项目的方法将创建 shaded jar。mvn package所以,会有两个罐子;原来的罐子和超级罐子。

exclude:一般情况下,uber jar 会在 pom.jar 中包含dependenciesjar 列表中的所有类。excludes指定一组不需要在阴影 jar 中的 jar 文件。如果您仔细查看该示例,它会排除 junit:junit jar,这意味着 junit 中的类不会在您的 uber jar 中。

于 2011-09-09T19:46:55.113 回答
0

将以下代码段添加到您的插件中。这应该会有所帮助。

 <artifactSet>
    <includes>
        <include>org.sonatype.haven.ExodusCli:*</include>
    </includes>
 </artifactSet>
于 2019-05-30T06:32:39.637 回答