Класс : Не удалось найти или загрузить основной класс

#java #gradle

Вопрос:

Вот мои файлы дерева :

 src
--JaJson.java
build.gradle
 

Вот мой JaJson.java:

 public class JaJson {

    public static void main(String args[]) {  
    System.out.println("Hello");  
    }  
    public JaJson(){
        System.out.println("what time is it ?");
    }

    public void getTime(){
        System.out.println("Hammer time!");
    }
}
 

Вот мой град.стройте :

 apply plugin: 'java'
apply plugin: 'eclipse'
//apply plugin: 'java-library'
apply plugin: 'application'

mainClassName = "JaJson"
// tag::repositories[]
repositories { 
    mavenCentral() 
}
// end::repositories[]

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(11)
    }
}


sourceSets {
    single{
        java {
            srcDir 'src'
            
        }
    }
}


jar {
  manifest {
    attributes(
      'Class-Path': configurations.compile.collect { it.getName() }.join(' '),
      'Main-Class': 'JaJson'
    )
  }
}
task compileSingle(type: JavaCompile) {
    source = sourceSets.single.java
    sourceSets.main.java.srcDirs = ['src']
    classpath = sourceSets.main.compileClasspath
    destinationDirectory = sourceSets.main.output.classesDirs[0]

}
compileJava {
    options.release = 7
}



version = '1.2.1'


// tag::dependencies[]
dependencies {
    implementation "joda-time:joda-time:2.2"
    testImplementation "junit:junit:4.12"
}
 

Когда я создаю сборку gradle и :

 java -jar buildlibsjajson-1.2.1.jar
 

Он отлично работает и печатает привет

Но когда я пытаюсь запустить класс только с :

 java buildclassesjavamainJaJson.class 
 

У меня есть :

 Impossible to found or load main class for  buildclassesjavamainJaJson.class 
 

И перед каждой сборкой я открываю папку «Сборки».

 rd /s /q build
gradle build amp;amp; java -jar buildlibsjajson-1.2.1.jar amp;amp; java buildclassesjavamainJaJson.class 
 

с уважением

Ответ №1:

Запустить как

 java -cp build/classes/main/java JaJason
 

Как объяснено в справке по команде Java, вам нужно указать имя основного класса, а не путь к основному классу. Если ваши классы не находятся в текущем каталоге (или в каталоге их пакетов прямо под текущим каталогом), вам необходимо указать путь к классам:

—путь к классу путь к классу,-путь к классу путь к классу или-путь к классу cp

[…] Если параметр путь к классу не используется и путь к классу не задан, то путь к пользовательскому классу состоит из текущего каталога (.).

Тем не менее, вы также можете запустить простой .java файл прямо из командной строки:

 java src/JaJson.java
 

Это полезно для быстрого запуска однофайловых программ без прохождения всего цикла сборки Gradle.