Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在命令提示符和IntelliJ IDEA中使用自定义jar库_Java_Intellij Idea_Cmd_Classpath - Fatal编程技术网

Java 在命令提示符和IntelliJ IDEA中使用自定义jar库

Java 在命令提示符和IntelliJ IDEA中使用自定义jar库,java,intellij-idea,cmd,classpath,Java,Intellij Idea,Cmd,Classpath,我在命令提示符下使用自定义jar库(algs4.jar/stdlib.jar from)时遇到问题。我将这些库添加到IntelliJ类路径设置(project Structure->SDK->classpath)中,并且能够使用它们的类,使用IntelliJ没有问题 但是,我还希望能够在命令提示符下使用这些库。尽管我在Windows设置中没有设置CLASSPATH变量,但在使用标准java库时,我能够在cmd中使用javac/java,没有任何问题。(可能是因为IntelliJ在每次启动/编译时

我在命令提示符下使用自定义jar库(algs4.jar/stdlib.jar from)时遇到问题。我将这些库添加到IntelliJ类路径设置(project Structure->SDK->classpath)中,并且能够使用它们的类,使用IntelliJ没有问题

但是,我还希望能够在命令提示符下使用这些库。尽管我在Windows设置中没有设置CLASSPATH变量,但在使用标准java库时,我能够在cmd中使用javac/java,没有任何问题。(可能是因为IntelliJ在每次启动/编译时为所有标准库设置类路径,以便在系统范围内工作)。然而,即使在将2个JAR添加到IntelliJ类路径设置之后,我也无法在cmd中使用“javac”。然后,我在windows设置中创建了CLASSPATH变量,并将JAR添加到其中。在此之后,我能够用javac进行编译,没有任何问题。但是,当我尝试在cmd中运行程序时,我得到以下结果:

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

每当我使用任何jar库(包括标准的jar库)时,我都会遇到这个错误,在设置Windows类路径之前,我没有遇到任何问题。我猜一旦我设置了自己的类路径,就会覆盖intelliJ设置的类路径。当我删除类路径时,我再次能够在cmd中编译和运行标准库,但不能编译和运行2个自定义库


请帮忙

您应该将这些库作为库而不是JDK添加到项目中,从而使它们成为项目的一部分,然后您可以或。另请参见。

As,在这种特殊情况下,问题可能是由于库中的类“……放在默认包中(没有包语句),而java的现代版本(至少7和8)禁止引用默认包中的类,除非您自己的类也在默认包中。”

为了解决这个问题,我从jar中提取了.java文件(将文件类型从.jar更改为.zip并提取到一个目录)。我创建了一个包名“com.sedge.stdlib”,并根据需要修改了.java文件。例如,我修改了algs4中的StdLib.java类,在顶部放置了一个package指令:

package com.sedge.stdlib;

import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.Locale;

/**
 *  <i>Standard output</i>. This class provides methods for writing strings
 *  and numbers to standard output.
 *  <p>
 *  For additional documentation, see <a href="http://introcs.cs.princeton.edu/15inout">Section 1.5</a> of
 *  <i>Introduction to Programming in Java: An Interdisciplinary Approach</i> by Robert Sedgewick and Kevin Wayne.
 *
 *  @author Robert Sedgewick
 *  @author Kevin Wayne
 */
public final class StdOut {
. . .
package com.sedge.stdlib;
导入java.io.OutputStreamWriter;
导入java.io.PrintWriter;
导入java.io.UnsupportedEncodingException;
导入java.util.Locale;
/**
*标准输出。此类提供了编写字符串的方法
*和数字转换为标准输出。
*
*有关其他文档,请参阅的
*《Java编程导论:跨学科方法》,Robert Sedgewick和Kevin Wayne著。
*
*@作者罗伯特·塞吉威克
*@作者凯文·韦恩
*/
公开期末考试标准{
. . .

我使用IntelliJ IDEA 12 Mac遵循了这一原则。如果我尝试使用jar中定义的类,它会警告“无法解析符号‘XXX’”。有什么想法吗?这与“工件”无关我想,因为我没有尝试导出项目。你是如何从它们中创建一个新的jar文件的?这只是一个重新编译所有.java文件的问题吗?META-INF和jar中的其他类似东西呢?就我而言,我满足于在项目中包含代码本身。创建jar将相当简单。META-INF的MANIFEST.MF文件很简单;它的内容包括:`MANIFEST Version:1.0 Created By:1.7.0_75(Oracle Corporation)`我想您的开发环境会生成一个相当类似的MANIFEST。发布这个问题后,我发现我可以使用JetBrains的想法“从现有源创建项目”,然后“构建工件”。我实际上已经将整个sedgewick库转换为使用Java1.8和Jogl2.0等。