Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.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
Can';t使用javac类路径和jar文件进行编译_Java_Javac - Fatal编程技术网

Can';t使用javac类路径和jar文件进行编译

Can';t使用javac类路径和jar文件进行编译,java,javac,Java,Javac,我正在学习如何手工编译,我看不出我做错了什么 我有一个名为FileServlet.java的.java文件,其中有一些导入,我在名为servlet-api.jar的.jar文件中有这些导入。两个文件位于同一目录中 Folder: C:\Users\User\Desktop\JTEST FileServlet.java servlet-api.jar FileServlet.java: package com.k2b; import java.io.BufferedInputS

我正在学习如何手工编译,我看不出我做错了什么

我有一个名为FileServlet.java的.java文件,其中有一些导入,我在名为servlet-api.jar的.jar文件中有这些导入。两个文件位于同一目录中

Folder: C:\Users\User\Desktop\JTEST
    FileServlet.java
    servlet-api.jar
FileServlet.java:

package com.k2b;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.Closeable;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLDecoder;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * The File servlet for serving from absolute path.
 * @author BalusC
 * @link https://balusc.omnifaces.org/2007/07/fileservlet.html
 */
public class FileServlet extends HttpServlet {
    //MyCode
}
我在-cp上读了一些书,所以我尝试了以下内容。 Javac版本是13.0.1

javac -cp servlet-api.jar FileServlet.java
但我得到:

FileServlet.java:21: error: cannot find symbol
public class FileServlet extends HttpServlet {
                                 ^
  symbol: class HttpServlet
FileServlet.java:33: error: cannot find symbol
    public void init() throws ServletException {
                              ^
  symbol:   class ServletException
  location: class FileServlet
FileServlet.java:43: error: cannot find symbol
    protected void doGet(HttpServletRequest request, HttpServletResponse response)

etc...
这里有什么问题?在类路径中指示jar文件就足够了吗?在.jar文件中有一些文件夹,这会有影响吗?如果是,我如何修改我的类路径引用

例如,类HttpServlet以这种方式位于.jar中:

javax
--servlet
----http
------HttpServlet.class
正如建议的那样,我使用-verbose标志运行了该命令,它输出以下内容:

[parsing started SimpleFileObject[C:\Users\User\Desktop\JTEST\FileServlet.java]]
[parsing completed 30ms]
[loading /modules/jdk.crypto.mscapi/module-info.class]
[loading /modules/jdk.internal.ed/module-info.class]
[loading /modules/java.net.http/module-info.class]
[loading /modules/jdk.jdwp.agent/module-info.class]
[loading /modules/java.instrument/module-info.class]
[loading /modules/jdk.management.jfr/module-info.class]
[loading /modules/jdk.jdeps/module-info.class]
[loading /modules/jdk.naming.rmi/module-info.class]
[loading /modules/jdk.jconsole/module-info.class]
[loading /modules/java.management.rmi/module-info.class]
[loading /modules/jdk.jlink/module-info.class]
[loading /modules/jdk.charsets/module-info.class]
[loading /modules/jdk.security.auth/module-info.class]
[loading /modules/jdk.management.agent/module-info.class]
[loading /modules/java.scripting/module-info.class]
[loading /modules/jdk.internal.vm.compiler.management/module-info.class]
[loading /modules/java.naming/module-info.class]
[loading /modules/jdk.zipfs/module-info.class]
[loading /modules/jdk.internal.opt/module-info.class]
[loading /modules/jdk.net/module-info.class]
[loading /modules/java.se/module-info.class]
[loading /modules/java.datatransfer/module-info.class]
[loading /modules/jdk.internal.vm.compiler/module-info.class]
[loading /modules/jdk.xml.dom/module-info.class]
[loading /modules/jdk.javadoc/module-info.class]
[loading /modules/jdk.security.jgss/module-info.class]
[loading /modules/jdk.rmic/module-info.class]
[loading /modules/jdk.jartool/module-info.class]
[loading /modules/jdk.sctp/module-info.class]
[loading /modules/jdk.unsupported.desktop/module-info.class]
[loading /modules/java.rmi/module-info.class]
[loading /modules/jdk.naming.dns/module-info.class]
[loading /modules/jdk.internal.le/module-info.class]
[loading /modules/jdk.jsobject/module-info.class]
[loading /modules/jdk.scripting.nashorn/module-info.class]
[loading /modules/jdk.localedata/module-info.class]
[loading /modules/jdk.crypto.ec/module-info.class]
[loading /modules/jdk.jstatd/module-info.class]
[loading /modules/java.logging/module-info.class]
[loading /modules/jdk.jshell/module-info.class]
[loading /modules/java.xml/module-info.class]
[loading /modules/java.sql/module-info.class]
[loading /modules/java.xml.crypto/module-info.class]
[loading /modules/java.base/module-info.class]
[loading /modules/java.transaction.xa/module-info.class]
[loading /modules/jdk.scripting.nashorn.shell/module-info.class]
[loading /modules/jdk.jdi/module-info.class]
[loading /modules/java.security.jgss/module-info.class]
[loading /modules/jdk.hotspot.agent/module-info.class]
[loading /modules/jdk.editpad/module-info.class]
[loading /modules/jdk.jfr/module-info.class]
[loading /modules/jdk.internal.vm.ci/module-info.class]
[loading /modules/java.smartcardio/module-info.class]
[loading /modules/jdk.aot/module-info.class]
[loading /modules/jdk.accessibility/module-info.class]
[loading /modules/jdk.jcmd/module-info.class]
[loading /modules/jdk.pack/module-info.class]
[loading /modules/jdk.unsupported/module-info.class]
[loading /modules/jdk.dynalink/module-info.class]
[loading /modules/java.prefs/module-info.class]
[loading /modules/java.security.sasl/module-info.class]
[loading /modules/java.management/module-info.class]
[loading /modules/jdk.compiler/module-info.class]
[loading /modules/java.sql.rowset/module-info.class]
[loading /modules/jdk.httpserver/module-info.class]
[loading /modules/java.compiler/module-info.class]
[loading /modules/jdk.crypto.cryptoki/module-info.class]
[loading /modules/jdk.management/module-info.class]
[loading /modules/jdk.attach/module-info.class]
[loading /modules/java.desktop/module-info.class]
[loading /modules/jdk.internal.jvmstat/module-info.class]
[search path for source files: servlet-api.jar]
[search path for class files: C:\Program Files\Java\jdk-13.0.1\lib\modules,servlet-api.jar]
[loading /modules/java.base/java/io/BufferedInputStream.class]
[loading /modules/java.base/java/io/BufferedOutputStream.class]
[loading /modules/java.base/java/io/Closeable.class]
[loading /modules/java.base/java/io/File.class]
[loading /modules/java.base/java/io/FileInputStream.class]
[loading /modules/java.base/java/io/IOException.class]
[loading /modules/java.base/java/net/URLDecoder.class]
FileServlet.java:21: error: cannot find symbol
public class FileServlet extends HttpServlet {
                                 ^
  symbol: class HttpServlet
[loading /modules/java.base/java/lang/String.class]
FileServlet.java:33: error: cannot find symbol
    public void init() throws ServletException {
                              ^
  symbol:   class ServletException
  location: class FileServlet
FileServlet.java:43: error: cannot find symbol
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
                         ^
  symbol:   class HttpServletRequest
  location: class FileServlet
FileServlet.java:43: error: cannot find symbol
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
                                                     ^
  symbol:   class HttpServletResponse
  location: class FileServlet
FileServlet.java:44: error: cannot find symbol
        throws ServletException, IOException
               ^
  symbol:   class ServletException
  location: class FileServlet
[loading /modules/java.base/java/lang/Deprecated.class]
[loading /modules/java.base/java/lang/annotation/Retention.class]
[loading /modules/java.base/java/lang/annotation/RetentionPolicy.class]
[loading /modules/java.base/java/lang/annotation/Target.class]
[loading /modules/java.base/java/lang/annotation/ElementType.class]
[checking com.k2b.FileServlet]
[loading /modules/java.base/java/io/Serializable.class]
[loading /modules/java.base/java/lang/AutoCloseable.class]
[loading /modules/java.base/java/lang/Exception.class]
[loading /modules/java.base/java/lang/Throwable.class]
FileServlet.java:53: error: cannot find symbol
            response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404.
                               ^
  symbol:   variable HttpServletResponse
  location: class FileServlet
[loading /modules/java.base/java/lang/Object.class]
[loading /modules/java.base/java/nio/charset/Charset.class]
[loading /modules/java.base/java/lang/Comparable.class]
FileServlet.java:64: error: cannot find symbol
            response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404.
                               ^
  symbol:   variable HttpServletResponse
  location: class FileServlet
FileServlet.java:69: error: cannot find symbol
        String contentType = getServletContext().getMimeType(file.getName());
                             ^
  symbol:   method getServletContext()
  location: class FileServlet
[loading /modules/java.base/java/lang/CharSequence.class]
[loading /modules/java.base/java/lang/constant/Constable.class]
[loading /modules/java.base/java/lang/constant/ConstantDesc.class]
[loading /modules/java.base/java/lang/Byte.class]
[loading /modules/java.base/java/lang/Character.class]
[loading /modules/java.base/java/lang/Short.class]
[loading /modules/java.base/java/lang/Long.class]
[loading /modules/java.base/java/lang/Float.class]
[loading /modules/java.base/java/lang/Integer.class]
[loading /modules/java.base/java/lang/Double.class]
[loading /modules/java.base/java/lang/Boolean.class]
[loading /modules/java.base/java/lang/Void.class]
[loading /modules/java.base/java/io/FileDescriptor.class]
[loading /modules/java.base/java/io/OutputStream.class]
[loading /modules/java.base/java/io/FilterInputStream.class]
[loading /modules/java.base/java/io/InputStream.class]
[loading /modules/java.base/java/io/FilterOutputStream.class]
[loading /modules/java.base/java/io/Flushable.class]
[total 324ms]
8 errors

使用
-cp
参数编译文件效果良好。请将您的问题包含在执行
javac
命令的位置(包括所有子目录)的目录列表中。当您使用
-verbose
标志时,还将您从
javac
中获得的输出包含到您的问题中。完成后,我添加了您要求的内容,请将您的问题包含到javac版本中。我已经用1.8.0_265对它进行了测试,但没有用新的模块布局对它进行测试。有一点是不正确的:当您列出目录中的文件时,该文件名为
servlet api.java
,而在命令行上它名为
servlet api.jar
。磁盘上的文件真的有扩展名
.java
?这就可以解释了。我的错误是,它确实是一个.jar文件。更正。版本是13.0.1