【问题标题】:Compile java program in command line with external .jar使用外部 .jar 在命令行中编译 java 程序
【发布时间】:2015-02-21 10:17:01
【问题描述】:

首先,我搜索了一些相关的主题,并且已经尝试了那些解决方案,但仍然存在一些问题,所以我会在这里尝试解释一下,希望有解决方案。

我正在尝试在命令行上编译一个已经在 eclipse 上运行的 java 程序。 .jar 文件和 java 文件都在同一个目录中,我要编译的类不在 .jar 中,但是在这个类中我使用了一些属于该 .jar (paillier.jar) 的方法

我第一次尝试这个:

javac -cp paillier.jar CoupleGen.java
java -cp paillier.jar CoupleGen

第一行给出 CoupleGen.class,暂时没有问题,当我输入第二行时,它给了我错误

Error: Could not find or load main class CoupleGen

所以,在这里阅读一些主题我尝试了另一种方式

javac -cp paillier.jar CoupleGen.java
java -cp .;paillier.jar CoupleGen

结果是这些行末尾的“如何使用”java命令列表

paillier.jar command not found

所以,我显然犯了一些错误,但实际上我无法理解。 以防万一,我设置了环境变量。

非常感谢任何帮助。

干杯

这是我要编译的代码

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.util.Random;

import paillierp.key.KeyGen;
import paillierp.key.PaillierKey;
import paillierp.key.PaillierPrivateKey;


public class CoupleGen {

    public static void main(String[] args) throws IOException{
        //Creo un messaggio m da criptare

        //for (int j=1; j==2; j++){

                int nodeID=5;
                int s=32;
                Random random = new Random();
                long seed = random.nextLong();
                PaillierPrivateKey pr= KeyGen.PaillierKey(s, seed);
                PaillierKey pu= pr.getPublicKey();
                System.out.println("PublicKey:("+pr.getN()+","+pr.getNPlusOne()+")");
                String pubkey ="PublicKey"+nodeID;
                    FileWriter File= new FileWriter(pubkey);
                    PrintWriter out=new PrintWriter(File);
                    out.println("n:" + pu.getN());
                    out.println("n+1:" + pu.getNPlusOne());
                    out.println("n^s:" + pu.getNS());
                    out.println("n^s+1:" + pu.getNSPlusOne());
                //  out.println("rnd:" + pu.getRnd());
                    out.println("k:" + pu.getK());  
                    out.close();
        //} for not working on this pc
    }
}

【问题讨论】:

  • java -cp ".;paillier.jar" CoupleGen
  • Windows 还是 Linux? (提示:Linux 使用 : 作为路径分隔符)
  • 第一次运行 set classpath=%classpath%;.;在命令提示符下,然后做你已经在做的事情。
  • 用过 .: 和 :.但事实上我的类不包含在 .jar 中,它给了我错误 Error: Could not find or load main class CoupleGen

标签: java eclipse command-line jar javac


【解决方案1】:

>> paillier.jar command not found

这听起来像是在 Linux 或 Mac 上运行,命令行将其解释为两个不同的命令,因为分号 ;:

java -cp .
paillier.jar CoupleGen

分号仅在 Windows 上用作路径分隔符,在 Linux 和 Mac 上应使用冒号 :。所以尝试运行你的代码:

java -cp .:paillier.jar CoupleGen

【讨论】:

  • BarrySW19 用评论击败了我,但想法相同。
  • (是的,在 xubuntu 上运行)带有这个冒号它给了我错误 Error: Could not find or load main class CoupleGen 看到另一个答案,我必须指出出我的课不在 paillier.jar
【解决方案2】:
javac -cp C:\...\yourjarfile.jar; javafile.java

这很容易在 Windows 命令提示符下工作。不要忘记写-cp, 分号(;), .jar, .java extensions,然后用java C:\...\yourjavafile.java运行它。您可以将您的目录从c 更改为de

【讨论】:

    【解决方案3】:

    当你在下面执行时,你得到了下面的错误吗?

    javac -cp paillier.jar CoupleGen.java

    错误:无法找到或加载主类 CoupleGen

    这意味着编译器正在 paillier.jar 中寻找 CouplenGen.java。实际上 CoupleGen 在 jar 文件之外。

    【讨论】:

    • 做一件事,在eclipse中使用你的整个项目制作一个jar文件。制作jar文件的过程是
    • 做一件事,在eclipse中使用你的整个项目制作一个jar文件。制作jar文件的过程是右键单击您的项目->导出->java->可运行的jar文件->单击下一步。然后在启动配置下拉框中选择 CoupleGen -> 选择所需的库到生成的 jar -> 完成。现在打开 cmd -> 转到 cmd-> 中的 jar 文件路径,然后给出命令 -> java -jar jarFileName。就是这样,它会自动执行。
    • 好的,成功了,非常感谢。现在的问题是我必须执行更多这样的 java 程序,我必须为每个人创建一个 .jar 文件来执行 em?难道没有像javac->java这样的方法吗?
    • 我没有得到你的问题。 “他们”是什么意思?让我清楚一点,您的具体要求是什么?
    • em 表示其他java程序。我会更好地解释自己,我将一个接一个地运行一些 java 程序,比如 Couplegen.java 用于生成一对密钥,Extract.java 用于从文件中提取密钥。根据情况,我必须使用这些 java 程序创建 bash 脚本(或类似的,仍在处理中)。
    猜你喜欢
    • 2014-02-03
    • 2021-11-10
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多