【问题标题】:how to include libraries in java without using an IDE如何在不使用 IDE 的情况下在 java 中包含库
【发布时间】:2011-07-04 00:18:24
【问题描述】:

如何在不使用像 Netbeans 这样的 IDE 的情况下在我的 java 程序中导入库? 在 Netbeans 中,我这样做:

我怎样才能通过只使用记事本++ 或程序员的记事本来实现相同的目标。 我尽可能不想使用 Netbeans,因为我只处理简单的项目,所以它会有点过分。

【问题讨论】:

    标签: java libraries


    【解决方案1】:

    你应该把它们放在你的类路径中,比如

    java -classpath someJar.jar YourMainClass

    当然,您也可以对 javac 执行相同操作。

    如果您的类路径中需要有多个 jar 或目录,则需要使用平台的默认路径分隔符。例如,在 Windows 上,

    java -classpath someJar.jar;myJar.jar YourMainClass

    顺便说一句,您可能会发现使用 IDE 来管理这类东西更容易。我个人只使用了我的稍微可编写脚本的编辑器并且管理得很好。但是很高兴知道如何通过命令行来做这些事情。

    【讨论】:

      【解决方案2】:
      javac -classpath external.jar myClass.java
      

      编辑:

      如果你的主类在一个包中

      package com.mycompany;
      public class myClass
      {
      ...
      ...
      

      然后

      你需要

      javac -classpath external.jar com/mycompany/myClass.java 
      

      和

      运行

      java -classpath external.jar com.mycompany.myClass
      

      【讨论】:

      • 线程“主”java.lang.NoClassDefFoundError 中的异常:Quizzer 原因:java.lang.ClassNotFoundException:java.net.URLClassLoader 中的 Quizzer$1.run(Unknown Source) at java.security.AccessController .doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader .loadClass(Unknown Source) 找不到主类:Quizzer。程序将退出。
      • 你的主类有包名吗?
      • @StackOverflowError - 您还需要在 java 命令上使用 -classpath 参数。
      • 如果您在 .java 文件所在的目录中编译,请使用:java -classpath external.jar:com.mycompany myClass
      • 我需要准确输入-classpath 还是需要用E:\some folder\my_lib.jar 之类的实际路径替换“类路径”??
      【解决方案3】:

      所有其他海报都在现场,您只需将 jar 添加到您的类路径。

      Java 提供了许多设置类路径的机制,包括通过命令行、通过环境变量以及通过在可执行 Java jar 文件的 MANIFEST.MF 中进行设置。

      这些都是难以管理的。了解技术并了解基础知识是很好的。但实际使用它们确实是个坏主意。

      你应该做的是这个。

      首先,将所有 Java 库放在系统上的一个位置。 C:\java\libraries 或其他。您记得的某个地方,您的所有项目都可以访问的某个地方。

      接下来,使用它们的版本号命名所有库。如果您使用 log4j v1.4.1,则将 jar 放在库区域的 log4j-1.4.1 目录中。这为您提供了“免费”的库版本控制。

      最后,学习 Ant。对于简单的项目,Ant 很简单。使用 Ant build.xml 文件编译、测试和运行您的应用程序。

      为什么?几个原因。

      因为一旦设置好,向您的项目添加一个新库是微不足道的,您可以在 build.xml 中添加一行。 Ant 让您可以更轻松地处理简单的抽象(例如所有库所在的位置)。

      build.xml 是自包含的。例如,如果您为类路径使用环境变量,那么一个项目的类路径可能与另一个项目的类路径不同。这意味着重置环境变量。继续这个,你最终会因为你的类路径设置错误而发誓它“以前工作过”的一些“新问题”。在build.xml中设置一次,忘记了。

      Ant 是便携式的。它在 Windows、Linux、Mac、AS/400 上运行相同,它在 Java 运行的任何地方运行,与 shell 脚本或 BAT 文件不同。

      它很轻。简单的蚂蚁脚本很简单。他们不会带很多行李,你总是可以让他们变得可怕复杂。对于构建而言,它比 Maven 简单得多。

      大多数 IDE 直接支持 Ant。如果您决定回到 IDE,大多数人只需使用最少配置的 ant 构建文件即可。

      这就是使用 notepad++ 解决类路径问题的方法。设置类路径是可行的,但还远远不够,管理起来很痛苦。学习 Ant 的基础知识会让您以最少的工作走得更远。

      【讨论】:

      • 这可能有效。但将所有 JAR 转储到一个地方并不是最佳做法。
      【解决方案4】:

      除了@StackOverflowException 的帖子之外,添加多个文件和位置也完全可以......

      javac -cp location1/;location2/;file1.jar;file2.jar fileToCompile
      

      注意事项::

      -cp 和 -classpath 是一回事。 如果您使用的是 Solaris(和其他一些 UNIX 版本),请更改 ';'到':'

      【讨论】:

        【解决方案5】:

        确保 jar 文件在你的类路径中并且你有 import 语句。

        【讨论】:

          【解决方案6】:

          把jar放到你的classpath中,classpath是一个环境变量

          【讨论】:

          • 我真正想说的是,如果您依赖 CLASSPATH 环境变量来查找 JAR,那么一个 Java 应用程序的 CLASSPATH 设置存在与设置冲突的风险需要另一个。这可以减轻,但它很容易绊倒你。更好的方法(更不容易出错)是编写包装脚本(或自定义启动器)来启动应用程序,或者将其转换为处理自己的类路径的“可执行”JAR,并使用java -jar ... 运行它跨度>
          • @StephenC 对不起,很沮丧...最终选择了 shebang java 源代码。 FOO=bar java... 在技术上是一个环境变量,但在我看来,它是一个良性参数。 env 代表环境...修改大型环境以操纵大型租户,这是个坏主意...我认为CLASSPATH=. java 并不比java -classpath . 差
          • 我同意这一点。但这不是典型的 Linux / Windows / Java 初学者设置 CLASSPATH 的方式。
          猜你喜欢
          • 2022-11-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-09-23
          • 2013-05-15
          • 2022-08-10
          • 1970-01-01
          相关资源
          最近更新 更多