Java程序无法使用命令行

时间:2018-01-17 07:11:27

标签: java intellij-idea

短篇小说: 当我通过Intellij运行我的java应用程序时,它一切正常。

当我通过命令行运行时,我遇到了一些问题。

长篇故事: 首先,我必须说我的项目中有一个'lib'文件夹,里面有我需要的所有Jars,我把它作为一个库添加到项目中。

当我从命令行编译它时,我必须为lib文件夹指定'-cp',否则它不会加载jar。即使它看起来不错,当我运行我的java应用程序时,我收到'Error: Could not find or load main class awsUpdater'错误

我的命令: 用于编译 -

javac -cp "../../../../lib/*" awsUpdater.java

执行 -

java -cp "../../../../lib/*" awsUpdater

这是我的班级(除了方法)

    package AWSUpdater;

import com.amazonaws.AmazonClientException;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.GetObjectRequest;
import com.amazonaws.services.s3.model.PutObjectRequest;
import com.amazonaws.services.s3.model.S3Object;

import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class awsUpdater {
    public static void main(String[] args) throws IOException {
        String bucketName = "bucket";
        String key        = "ket";

    //AmazonS3 s3Client = new AmazonS3Client(new ProfileCredentialsProvider());
    AmazonS3 s3Client = new AmazonS3Client(DefaultAWSCredentialsProviderChain.getInstance());

    System.out.println("Downloading an object");
    S3Object s3object = s3Client.getObject(new GetObjectRequest(
            bucketName, key));

    //Get new version of android
    String newAndroidVersion = getNewAndroidVersion();

    //Download current versions.json
    String currentJson = displayTextInputStream(s3object.getObjectContent());

    //Edit versions.json with new android version
    String editedJson = editJsonWithCurrentAndroidVersion(currentJson, newAndroidVersion);

    //String editedJson = editJsonDummyCheck(currentJson);

    //Create new file to upload to S3
    createFileWithNewJson(editedJson);

    //Upload new file to S3
    updateVersion(bucketName, key, "versions.json");

}

非常感谢有关如何通过命令行编译和执行程序的任何帮助。谢谢!

2 个答案:

答案 0 :(得分:1)

您需要添加包名称

java -cp "../../../../lib/*" AWSUpdater.awsUpdater

答案 1 :(得分:0)

我注意到课程awsUpdater位于包AWSUpdater下,因此您无法直接使用java -cp "../../../../lib/*" awsUpdater。 例如: 我创建了这样一个项目:

|-test
  |-AWSUpdater
    |-awsUpdater.java

awsUpdater.java的详细信息:

public class awsUpdater {
    public static void main(String[] args) {
        System.out.println("hello");
    }
}

然后(现在我在test/AWSUpdater):

javac awsUpdater.java
java awsUpdater

一切顺利!

如果我将类添加到包中,如下所示:

package AWSUpdater;

public class awsUpdater {
    public static void main(String[] args) {
        System.out.println("hello");
    }
}

然后(现在我在test/AWSUpdater):

javac awsUpdater.java
java awsUpdater

在这里,它会得到与你的错误相同的错误。

现在,您可以转到包的根目录。 (这里是test),然后是:

javac AWSUpdater/awsUpdater.java
java AWSUpdater/awsUpdater

现在,您将获得正确的结果。