我尝试使用Gradle运行一个非常简单的项目,并在使用gradlew run command
时遇到以下错误:
could not find or load main class 'hello.HelloWorld'
这是我的文件结构:
SpringTest
-src
-hello
-HelloWorld.java
-Greeter.java
-build
-libs
-tmp
-gradle
-wrapper
-build.gradle
-gradlew
-gradlew.bat
我排除了libs和tmp文件夹的内容,因为我认为这不是这个问题的相关信息,但如果需要,我可以添加它。
这是我的build.gradle文件:
apply plugin: 'java'
apply plugin: 'application'
apply plugin: 'eclipse'
mainClassName = 'hello/HelloWorld'
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
compile "joda-time:joda-time:2.2"
}
jar {
baseName = "gs-gradle"
version = "0.1.0"
}
task wrapper(type: Wrapper) {
gradleVersion = '1.11'
}
有关如何解决此问题的任何想法?我已经为mainClassName属性尝试了各种各样的东西,但似乎没有任何效果。
答案 0 :(得分:59)
我在这里看到两个问题,一个问题sourceSet
另一个问题mainClassName
。
将java源文件移至src/main/java
而不是src
。或者通过将以下内容添加到build.gradle来正确设置sourceSet
。
sourceSets.main.java.srcDirs = ['src']
mainClassName
应该是完全限定的类名,而不是路径。
mainClassName = "hello.HelloWorld"
答案 1 :(得分:7)
只是为了让新手试图从Netbeans运行一个gradle项目: 要理解这一点,您需要查看主要类名称的内容和 gradle构建的内容:
主要课程:
package com.stormtrident;
public class StormTrident {
public static void main(String[] cmdArgs) {
}
}
请注意,它是包" com.stormtrident"的一部分。
Gradle build:
apply plugin: 'java'
defaultTasks 'jar'
jar {
from {
(configurations.runtime).collect {
it.isDirectory() ? it : zipTree(it)
}
}
manifest {
attributes 'Main-Class': 'com.stormtrident.StormTrident'
}
}
sourceCompatibility = '1.8'
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
if (!hasProperty('mainClass')) {
ext.mainClass = 'com.stormtrident.StormTrident'
}
repositories {
mavenCentral()
}
dependencies {
//---apache storm
compile 'org.apache.storm:storm-core:1.0.0' //compile
testCompile group: 'junit', name: 'junit', version: '4.10'
}
答案 2 :(得分:1)
在一段时间内遇到同样的问题。但是在创建目录结构src / main / java并放入源代码(从包的顶部)之后,它按预期工作。
我试过的tutorial。执行gradle build
后,您必须能够在classes
目录下找到build
。
答案 3 :(得分:1)
在我的build.gradle中,我通过创建一个任务然后指定" mainClassName"解决了这个问题。如下:
task(runSimpleXYZProgram, group: 'algorithms', description: 'Description of what your program does', dependsOn: 'classes', type: JavaExec) {
mainClassName = 'your.entire.package.classContainingYourMainMethod'
}
答案 4 :(得分:1)
我通过在我的应用程序中添加以下代码来解决它。
//在此处输入代码 这是我运行build.gradle时遇到的错误。主类名称尚未配置,无法解析
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
答案 5 :(得分:0)
我通过运行gradle build(或者手动删除gradle build文件夹)来修复此问题
如果将主类移动到新包并且仍然在claspath中引用旧的主类,则会发生这种情况
答案 6 :(得分:0)
当我遇到此错误时,原因是我的课程中没有课程。将您的HelloWorld.java
文件放在“包”文件夹中。您可能必须创建一个新的包文件夹:
右键单击hello
文件夹,然后选择“新建”> “包”。然后给它一个名字(例如:com.example)并将你的HelloWorld.java
类移到包中。
答案 7 :(得分:0)
验证 gradle.properties 是否正确定义了一个JAVA_HOVE
org.gradle.java.home = C:\ Program Files(x86)\ Java \ jdk1.8.0_181
或
答案 8 :(得分:0)
如果您决定在Kotlin中编写hello.World
类,则另一个问题可能是您必须将其引用为mainClassName = "hello.WorldKt"
。
src / main / java / hello / World.kt:
package hello
fun main(args: Array<String>) {
...
}
// class World {} // this line is not necessary
答案 9 :(得分:0)
对于像这样的项目结构
project_name/src/main/java/Main_File.class
在文件build.gradle
中,添加以下行
mainClassName = 'Main_File'
答案 10 :(得分:0)
对于Netbeans 11用户,这对我有用:
apply plugin: 'java'
apply plugin: 'application'
// This comes out to package + '.' + mainClassName
mainClassName = 'com.hello.JavaApplication1'
这通常是我的树
C:\...\NETBEANSPROJECTS\JAVAAPPLICATION1
│ build.gradle
├───src
│ ├───main
│ │ └───java
│ │ └───com
│ │ └───hello
│ │ JavaApplication1.java
│ │
│ └───test
│ └───java
└───test
答案 11 :(得分:0)
如果您使用的是Spring Boot,则可能是以下问题:target。
基本上,输出目录在Gradle 4.0中已更改,因此,如果对它们进行硬编码,则执行将失败。
解决方案是替换:
bootRun {
dependsOn pathingJar
doFirst {
classpath = files("$buildDir/classes/main", "$buildDir/resources/main", pathingJar.archivePath)
}
}
作者:
bootRun {
dependsOn pathingJar
doFirst {
classpath = files(sourceSets.main.output.files, pathingJar.archivePath)
}
}
答案 12 :(得分:0)