使用 maven-scala-plugin 构建 jar

Posted

技术标签:

【中文标题】使用 maven-scala-plugin 构建 jar【英文标题】:Building jar with maven-scala-plugin 【发布时间】:2011-03-24 00:40:50 【问题描述】:

我创建了 scala 应用程序,现在我想构建 jar。 我运行mvn package,而不是尝试通过命令运行 jar

java -jar target/burner-1.0-SNAPSHOT.jar

我看到了错误:

Failed to load Main-Class manifest attribute from

如何定义 Main-Class 属性? 我需要创建 Manifest.mf 吗?在哪里? 或者我需要在 pom.xml 中的某个地方有 mainclass 属性?

更新: 我创建了包含内容的 src/main/resources/MANIFEST.MF 文件

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: itsabear
Main-Class: ru.dmteam.App
Build-Jdk: 1.6.0_20

我没有忘记文件末尾的行结束符。 在mvn package 之后,我看到了新罐子。我检查了这个 jar 中的 manifest.mf - 它包含正确的主类,但是当我输入 java -jar target/burner-1.0-SNAPSHOT.jar 时,我仍然看到错误 Failed to load Main-Class manifest attribute from

我的 pom.xml http://pastie.org/1070483

更新 2 我发现现在 jar 中有两个 manifest.mf 文件。 MANIFEST.MF 和 META-INF/MANIFEST.MF 我将自定义 MANIFEST.MF 移动到刚刚创建的 META-INF 文件夹(在 src/main/resources 中),但现在 mvn package 在创建 jar 时覆盖它...

【问题讨论】:

你能发布一份你的 pom.xml 的副本吗?您应该能够在 Maven 中执行此操作,而无需手动创建清单文件。 我已经更新了帖子。 我发现了一些新事实并更新了帖子。 scala 文件是否已添加到您的 jar 中?这可以解释为什么在 'scala -cp' 工作时'java -jar' 命令不起作用。您可以使用 maven-assembly-plugin 打包 scala 依赖项(我认为您也可以在此处指定默认的主类)。 hmm... 我的 jar 中没有 scala 文件。我将尝试根据 maven-scala-plugin 指南重新创建 pom.xml(现在很糟糕)。如果这没有帮助,我会尝试 maven 程序集。 【参考方案1】:

你可以这样运行jar

scala -cp 目标/项目名称-1.0-SNAPSHOT.jar

【讨论】:

【参考方案2】:

使用 scala-archetype-simple 原型创建一个新的 maven 项目(打印“Hello World”的简单项目)后,我需要将以下内容添加到我的 pom.xml

   <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2-beta-5</version>
    <configuration>
      <descriptorRefs>
        <descriptorRef>jar-with-dependencies</descriptorRef>
      </descriptorRefs>
      <archive>
        <manifest>
          <mainClass>test.App</mainClass>
        </manifest>
      </archive>
    </configuration>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>single</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

让类 test.App 在使用命令调用时按需要运行

java -jar ./target/mytest-1.0-SNAPSHOT-jar-with-dependencies.jar

运行命令后

mvn package

【讨论】:

当我输入 mvn package 我看到错误 'single' was specified in an execution, but not found in the pluin ' 所以现在我可以通过命令 mvn assembly:assembly 构建工作 jar,但我需要使用命令 java -cp target/file.jar -DmainClass ru.dmteam.App 运行它。是否可以使用正确的清单创建 jar? 组件应该将程序集创建绑定到正常的包阶段,您是否将它包含在您的 pom.xml 中? 条目应配置为包含 ru.dmteam.App 在您的情况下。 当我将 maven 版本更改为 2.2-beta-3 时,所有问题都消失了!谢谢。 当我运行java -jar xxx.jar 时,类路径搞砸了,抛出Could not resolve substitution to a value: $spray.version。任何想法如何设置正确的类路径?

以上是关于使用 maven-scala-plugin 构建 jar的主要内容,如果未能解决你的问题,请参考以下文章

IDEA中maven项目打包生成可执行jar

IDEA结合maven将依赖都打入jar包

GraphChi/graphchi-java程序配置

使用自定义构建器使用 Android 创建发布构建

使用自动工具构建系统/在单独的“构建”目录中构建

使用 GraphQL 构建 BFF Demo