【问题标题】:Compiling and running a java program with complex file structure from the commandline从命令行编译和运行具有复杂文件结构的 java 程序
【发布时间】:2017-07-17 23:07:48
【问题描述】:

尝试从设置有点奇怪的命令行编译和运行我的 java 程序。文件结构如下:

[ROOT]/
|
|____libs/
|    |____myExtraJar.jar
|     
|____src/
     |____main/
          |____com/
               |____example/
                    |____myClass.java

包在java文件的顶部定义为

package com.example;

我可以在根文件夹中编译程序(我认为),使用

javac -classpath "/libs/myExtraJar.jar" src/main/com/example/*.java

我没有收到任何编译错误(如果我离开类路径时发生的错误),我可以看到 .class 文件正在 com/example/ 文件夹中创建。但是,我找不到任何方法来运行已编译的程序。跑步

java src/main/com/example/myClass

消息中的结果

Error: Could not find or load main class src.main.com.example.myClass

任何帮助将不胜感激。

【问题讨论】:

  • 当你有这样的文件结构(顺便说一下,这被称为标准目录布局)时,你通常使用 Maven 或 Gradle 来管理你的构建,而 src/main 不是t 包的一部分。
  • 嗯,有道理,这个项目作为旧Android Studio项目的残余存在,并使用原始文件结构。

标签: java linux javac


【解决方案1】:

运行时需要指定类路径,还需要使用全限定类名。喜欢,

java -cp "libs/myExtraJar.jar:src/main" com.example.myClass

【讨论】:

  • 这就是问题所在,非常感谢!我会尽快接受正确的答案。
【解决方案2】:

艾略特是对的。更准确地说,您需要将 build 目录 添加到您的类路径中。它是包含您的*.class 文件的目录,有时被命名为target/

$ java -cp "target:lib/myExtraJar.jar" com.example.myClass

此外,src/main/com/example/myClass 应该是com.example.myClass,这是完全限定的类名。有关java 命令的详细信息,请参阅http://www.manpagez.com/man/1/java/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多