"Could not find or load main class" 从执行 'mvn install' 中生成的 JAR
"Could not find or load main class" from executing JAR generated in 'mvn install'
我正在尝试使用 Maven 从 Groovy 代码生成 JAR 文件。它运行良好,类 在 jar 文件中,但它给了我错误 Error: Could not find or load main class me.strafe.hello.Main
.
pom.xml
<build>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>compile</id>
<phase>compile</phase>
<configuration>
<tasks>
<mkdir dir="${basedir}/src/main/groovy"/>
<taskdef name="groovyc"
classname="org.codehaus.groovy.ant.Groovyc">
<classpath refid="maven.compile.classpath"/>
</taskdef>
<mkdir dir="${project.build.outputDirectory}"/>
<groovyc destdir="${project.build.outputDirectory}"
srcdir="${basedir}/src/main/groovy/"
listfiles="true">
<classpath refid="maven.compile.classpath"/>
</groovyc>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>me.strafe.hello.Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
我从 Groovy 文档中获取了这个。
树:
├── pom.xml
├── src
│ └── main
│ └── groovy
│ └── Main.groovy
Main.groovy:
package me.strafe.hello
class Main {
static void main(String[] args) {
println "Hello, World!"
}
}
我也试过gradle,但我不太熟悉,因为我以前用过maven。
如果你运行这样的程序,它会工作:
java -cp my.jar me.strafe.hello.Main
确保将任何其他罐子(如 groovy 罐子)添加到 class 路径,类似这样(文件分隔符是 Linux 上的 :
, ;
在 Windows 上):
java -cp libs/groovy-all.jar:my.jar me.strafe.hello.Main
您还可以将 POM 配置为 generate a "fat jar",将依赖项包含在单个 jar 中,以简化此过程。
如果你真的想让你的 jar 运行可用,那么你应该像上面那样做,而且 add the Main-Class
declaration 到 jar 的清单,这样你就不需要指定主要 class在命令行中如上所示。
一旦您完成了这两件事(fat jar 和 Main-Class 在清单中声明),此命令也将起作用:
java -jar my.jar
我正在尝试使用 Maven 从 Groovy 代码生成 JAR 文件。它运行良好,类 在 jar 文件中,但它给了我错误 Error: Could not find or load main class me.strafe.hello.Main
.
pom.xml
<build>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>compile</id>
<phase>compile</phase>
<configuration>
<tasks>
<mkdir dir="${basedir}/src/main/groovy"/>
<taskdef name="groovyc"
classname="org.codehaus.groovy.ant.Groovyc">
<classpath refid="maven.compile.classpath"/>
</taskdef>
<mkdir dir="${project.build.outputDirectory}"/>
<groovyc destdir="${project.build.outputDirectory}"
srcdir="${basedir}/src/main/groovy/"
listfiles="true">
<classpath refid="maven.compile.classpath"/>
</groovyc>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>me.strafe.hello.Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
我从 Groovy 文档中获取了这个。
树:
├── pom.xml
├── src
│ └── main
│ └── groovy
│ └── Main.groovy
Main.groovy:
package me.strafe.hello
class Main {
static void main(String[] args) {
println "Hello, World!"
}
}
我也试过gradle,但我不太熟悉,因为我以前用过maven。
如果你运行这样的程序,它会工作:
java -cp my.jar me.strafe.hello.Main
确保将任何其他罐子(如 groovy 罐子)添加到 class 路径,类似这样(文件分隔符是 Linux 上的 :
, ;
在 Windows 上):
java -cp libs/groovy-all.jar:my.jar me.strafe.hello.Main
您还可以将 POM 配置为 generate a "fat jar",将依赖项包含在单个 jar 中,以简化此过程。
如果你真的想让你的 jar 运行可用,那么你应该像上面那样做,而且 add the Main-Class
declaration 到 jar 的清单,这样你就不需要指定主要 class在命令行中如上所示。
一旦您完成了这两件事(fat jar 和 Main-Class 在清单中声明),此命令也将起作用:
java -jar my.jar