构建的java类不表示更改

构建的java类不表示更改,java,cognos-bi,Java,Cognos Bi,警告:我不是Java或Eclipse专家 我在Eclipse中继承了一个Java项目。我对多个java文件进行了更改。这样做并保存文件后,我运行了一个名为set_javac.bat的文件(也是继承的)。以下是该文件的修订版本: set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_85 rem set JAR_HOME="D:\Cognos\cognos_version\sdk\java\lib" set JAR_HOME="D:\code\lib" se

警告:我不是Java或Eclipse专家

我在Eclipse中继承了一个Java项目。我对多个java文件进行了更改。这样做并保存文件后,我运行了一个名为set_javac.bat的文件(也是继承的)。以下是该文件的修订版本:

set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_85

rem set JAR_HOME="D:\Cognos\cognos_version\sdk\java\lib"
set JAR_HOME="D:\code\lib"

set JAVAC=%JAVA_HOME%/bin/javac

set PATH=%JAVA_HOME%/bin
rem Create the Classpath

set CLASSPATH=
set CLASSPATH=%CLASSPATH%;%JAVA_HOME%/lib/tools.jar

rem Compile Java files
运行此文件后,我将运行build.bat(也继承-编辑):

这两个.bat文件都运行正常。新的.class文件与其.java文件在同一目录中创建。还创建了一个新的CAM_AAA_TestSample.jar文件。然而,当.jar文件放在正确的位置,Cognos服务重新启动,我检查日志文件时,我看不到我所做的更改。具体而言,我已将日志消息更改为(例如):

但是当我打开日志文件时,我看到新消息(日期/时间戳)仍然是旧格式的。我做错了什么


如果您需要有关设置的更多详细信息,请让我知道,我会尽我所能为您提供。我们使用Eclipse来管理工作区并使用“intellisence”,但我们不使用它进行构建。非常感谢您提供的任何信息。

您可以在类路径上的多个类文件或jar文件中定义一个类。当这种情况发生时,JVM会选择一个来使用——我很确定这是它遇到的第一个,按照它在类路径中列出文件的顺序


我的猜测是,您遇到了这样的情况,您正在替换一个包含旧类定义的jar文件,但JVM实际上使用了类路径上某个其他文件的定义。从您的评论来看,这或多或少是正确的。

可以在类路径上的多个类文件或jar文件中定义一个类。当这种情况发生时,JVM会选择一个来使用——我很确定这是它遇到的第一个,按照它在类路径中列出文件的顺序


我的猜测是,您遇到了这样的情况,您正在替换一个包含旧类定义的jar文件,但JVM实际上使用了类路径上某个其他文件的定义。从您的评论来看,这或多或少是正确的。

这可能有些幼稚,但您是否尝试过导航到eclipse之外的文件?我在IntelliJ上也遇到过类似的问题,在我显式点击save之前,IntelliJ实际上不会写入我对磁盘所做的更改。即使没有任何更改,脚本看起来也会生成新的类文件。这个jar是否存在于类路径上的多个位置?也许你没有替换实际使用的那个?在发布这个问题之前,我确实检查了文件以确保:当我写“新的.class文件和它们的.java文件创建在同一个目录中”时,我想“但是.java文件看起来像eclipse中的那些吗?”所以,我在记事本中打开了它们,它们是一样的。是的,批处理文件确实会创建新的.class文件,即使没有任何更改。现在,我真的不知道,但我不这么认为。当系统管理员将“工作”文件替换为我创建的新文件时,我验证它是否与构建它的目录中的文件具有相同的时间戳。但我会四处看看。我碰巧看到一些类定义出现在两个地方。然后JVM获取它找到的第一个。可能是“工作”文件不是您认为的文件。从这里很难说。只是一个想法。这可能很幼稚,但您是否尝试过导航到eclipse之外的文件?我在IntelliJ上也遇到过类似的问题,在我显式点击save之前,IntelliJ实际上不会写入我对磁盘所做的更改。即使没有任何更改,脚本看起来也会生成新的类文件。这个jar是否存在于类路径上的多个位置?也许你没有替换实际使用的那个?在发布这个问题之前,我确实检查了文件以确保:当我写“新的.class文件和它们的.java文件创建在同一个目录中”时,我想“但是.java文件看起来像eclipse中的那些吗?”所以,我在记事本中打开了它们,它们是一样的。是的,批处理文件确实会创建新的.class文件,即使没有任何更改。现在,我真的不知道,但我不这么认为。当系统管理员将“工作”文件替换为我创建的新文件时,我验证它是否与构建它的目录中的文件具有相同的时间戳。但我会四处看看。我碰巧看到一些类定义出现在两个地方。然后JVM获取它找到的第一个。可能是“工作”文件不是您认为的文件。从这里很难说。只是一个想法。
@echo off

rem Licensed Materials - Property of IBM
rem 
rem IBM Cognos Products: CAMAAA
rem 
rem (C) Copyright IBM Corp. 2005, 2012
rem 

rem  Copyright © 2008 Cognos ULC, an IBM Company. All Rights Reserved.
rem  Cognos and the Cognos logo are trademarks of Cognos ULC (formerly Cognos Incorporated).

rem Build Java files in directory TestSample

echo Building TestSample

rem Build the CLASSPATH required to build Java files in the directory TestSample

set _CLASSPATH=D:\code\lib\CAM_AAA_CustomIF.jar;D:\code\adapters;D:\Cognos\cognos_version\webapps\p2pd\WEB-INF\lib\ojdbc6.jar;D:\code\lib\axis.jar;D:\code\lib\jaxrpc.jar

rem Compile Java files
javac -Xlint:unchecked -classpath %_CLASSPATH% -d . *.java

rem Create jar file
jar cfm0 CAM_AAA_TestSample.jar MANIFEST *.class

echo done
thisfile: init
thisfile.java -> init: Entered function