Java 查找Eclipse编译的.class文件

Java 查找Eclipse编译的.class文件,java,eclipse,file,class,Java,Eclipse,File,Class,问题: 我怎么能只编译一个类呢?如何将其放入类文件(我创建的)中?Eclipse不是在运行时自动编译所有类吗 背景故事: 我正在遵循一个规则,它告诉我: 将编译后的类放入WEB-INF/类中 如果类别为: package org.odata4j.tomcat; import java.util.Properties; import org.core4j.Enumerable; import org.core4j.Func; import org.core4j.Funcs; import org.

问题:

我怎么能只编译一个类呢?如何将其放入类文件(我创建的)中?Eclipse不是在运行时自动编译所有类吗

背景故事:

我正在遵循一个规则,它告诉我:

将编译后的类放入WEB-INF/类中

如果类别为:

package org.odata4j.tomcat;
import java.util.Properties;
import org.core4j.Enumerable;
import org.core4j.Func;
import org.core4j.Funcs;
import org.odata4j.producer.ODataProducer;
import org.odata4j.producer.ODataProducerFactory;
import org.odata4j.producer.inmemory.InMemoryProducer;

public class ExampleProducerFactory implements ODataProducerFactory {

  @Override
  public ODataProducer create(Properties properties) {
    InMemoryProducer producer = new InMemoryProducer("example");

    // expose this jvm's thread information (Thread instances) as an entity-set called "Threads"
producer.register(Thread.class, Long.class, "Threads", new Func<Iterable<Thread>>() {
  public Iterable<Thread> apply() {
    ThreadGroup tg = Thread.currentThread().getThreadGroup();
    while (tg.getParent() != null)
      tg = tg.getParent();
    Thread[] threads = new Thread[1000];
    int count = tg.enumerate(threads, true);
    return Enumerable.create(threads).take(count);
  }
}, Funcs.method(Thread.class, Long.class, "getId"));

return producer;
  }
 }
package org.odata4j.tomcat;
导入java.util.Properties;
导入org.core4j.Enumerable;
导入org.core4j.Func;
导入org.core4j.Funcs;
导入org.odata4j.producer.ODataProducer;
导入org.odata4j.producer.ODataProducerFactory;
导入org.odata4j.producer.inmemory.InMemoryProducer;
公共类ExampleProducerFactory实现ODataProducerFactory{
@凌驾
公共ODataProducer创建(属性){
InMemoryProducer producer=新的InMemoryProducer(“示例”);
//将此jvm的线程信息(线程实例)作为名为“线程”的实体集公开
producer.register(Thread.class,Long.class,“Threads”,new Func()){
公共Iterable应用(){
ThreadGroup tg=Thread.currentThread().getThreadGroup();
while(tg.getParent()!=null)
tg=tg.getParent();
线程[]线程=新线程[1000];
int count=tg.enumerate(线程,true);
返回可枚举的。创建(线程)。获取(计数);
}
},functs.method(Thread.class,Long.class,“getId”);
回报生产者;
}
}

您的java文件位置应该是:
org/odata4j/tomcat/ExampleProducerFactory.java
然后您可以在命令行上执行:
javac org/odata4j/tomcat/ExampleProducerFactory.java
这将创建编译后的类文件:
org/odata4j/tomcat/ExampleProducerFactory.class
将其放入文件夹
WEB-INF/classes/org/odata4j/tomcat/ExampleProducerFactory.class

但更好的是,在eclipse中创建“动态Web项目”,它将为您处理所有事情(只需使用默认值)。最终结果将是一个
.war
文件,您可以通过菜单选项:文件->导出创建该文件


这样的
.war
文件可以部署在任何web容器中,如tomcat。在tomcat中查找autodeploy目录或使用tomcat管理控制台进行部署。

假设该类位于名为
ExampleProducerFactory.java
的文件中,您可以通过导航到包含该文件的目录并键入

javac ExampleProducerFactory.java


这将创建一个名为
ExampleProducerFactory.class
的文件,您可以将其移动到所需的目录。

保存
.java
文件时,如果没有编译器错误,Eclipse会将其编译成
.class
文件。您通常可以在项目的
bin
子目录中找到此文件。特别是,它将位于
bin/org/odata4j/tomcat
中,因为您已经声明您的类属于
org.odata4j.tomcat
包。请随意将此文件复制到您希望的任何位置


注意:如果您拥有
odata4j.org
域,则只应在包名中使用
org.odata4j
。否则,您应该选择自己的包名。

要在Eclipse中正常工作,您需要在“动态Web项目”中工作,而不是在普通的“Java项目”中工作,后者在Eclipse的标准普通Java下载中不可用

您需要下载并使用Eclipse的JavaEE风格,或者将WTP添加到当前安装中以获得它


请注意,使用简单的Web应用程序启动和运行的最简单方法是使用Netbeans,它在Java EE风格中默认已正确连接(包括Tomcat)。

成功编译.Java之后,.class将位于项目工作区下的bin文件夹中

我在项目->属性->Java构建路径字段默认输出文件夹中找到我的类文件。
对我来说,默认值是“项目名称/目标/类”。

我只需打开java文件位置(在包资源管理器中右键单击-->在-->系统资源管理器中显示),转到工作区顶部,搜索不带扩展名的文件名。
它还提供了.class文件。我只是删除它

“Eclipse不是在运行时自动编译所有类吗?”
——Eclipse会在您键入时自动编译。这是一种快速识别编译错误的方法。如果您查看bin子目录,您将看到类文件。通常eclipse会为您这样做。如果您转到eclipse生成路径(右键单击项目的属性->生成路径),然后选择“源”,它应该会显示一个输出文件夹。如果它在您的路径上,您可以使用
javac
编译任何您想要的java文件。@HovercraftFullOfEels注意eclipse默认编译,但是不需要。请注意,如果启用了Eclipse自动生成,如果您碰巧将生成的类文件放在配置的输出目录中,它将快速覆盖该类文件。(例如
WEB-INF/classes
)@Henry检查编辑历史记录。在我发布这个答案的时候,问题是“如何编译一个Java类?”投票被锁定,直到你编辑你的答案。所以如果编辑,我将取消投票。bin子目录应该在哪里?在项目的根目录中,但它可能是不同的文件夹,具体取决于项目配置。您可以在构建路径部分的属性菜单中进行检查。更准确地说,导航时有一个“默认输出文件夹”输入元素:右键单击project->Properties->选择“Java构建路径”,因为您的项目正在使用Maven。Eclipse只是尊重它并使用maven约定。