Java 프로젝트에서 기발한 몇 가지 동작이 있습니다. 상황은 javac
컴파일하는 동안 클래스에서 메서드를 제거하는 것 같습니다.Ant Javac 작업 삭제 방법
public class MessedUp extends X {
//a bunch of variables here
//a bunch of methods here
public void thisDisappears(String arg){
}
//a bunch more methods here
}
이 방법을 인스턴스화하고 호출하는 다른 클래스가 있습니다 :
클래스는 다음과 같이 보입니다
가public class WontCompile {
public void doSomething(){
MessedUp mu = new MessedUp();
mu.thisDisappears("something");
}
}
첫 번째 클래스는 잘 컴파일,하지만 두 번째는하지 않습니다. javac
는 같은 출력 다음
[javac] C:\mypath\WontCompile.java:251: error: cannot find symbol
[javac] mu.thisDisappears("something");
[javac] ^
[javac] symbol: method thisDisappears(String)
[javac] location: variable mu of type MessedUp
나는 내가이 문제를 추적하고 있습니다 (몇 년 이클립스에서 사용 되었기 때문에 나는 ant
파일을 사용하려고 같은 코드가 좋은 것을 알고 이클립스 제작). 그러나 잠시 후 이클립스는 thisDisappears
에 대한 호출을 강조하고 존재하지 않는다고 말하면서 그것을 생성하겠다고 제안합니다. 제안을 수락하면 Eclipse는 같은 이름을 가진 두 가지 메소드가 있다고 불평합니다. 외관상으로 재건 또는 무언가를 일으키는 원인이되는 작은 조각 후에, 과실은 멀리 간다.
잠시 동안 구동되면서 MessedUp.java의 실제 클래스 파일을 확인하기로 결정했습니다. Java Decompiler GUI을 사용하여 thisDisappears
이 클래스 파일에 없습니다.
<project basedir="." default="build" name="MyProject">
<property name="LIB_HOME" value="C:\dev\LibSuite-9.3.1"/>
<property environment="env"/>
<property name="debuglevel" value="source,lines,vars"/>
<property name="target" value="1.7"/>
<property name="source" value="1.7"/>
<path id="MyProject.classpath">
<pathelement location="bin"/>
<pathelement location="lib/edu.mit.jwi_2.1.4.jar"/>
<pathelement location="lib/edu.sussex.nlp.jws.beta.11.jar"/>
<pathelement location="lib/jaws-bin.jar"/>
<pathelement location="lib/junit-4.11.jar"/>
<!--External Jars-->
<pathelement location="${LIB_HOME}/share/java/abc.jar"/>
<pathelement location="${LIB_HOME}/share/java/def-9.3.1.jar"/>
</path>
<target name="init">
<mkdir dir="bin"/>
<copy includeemptydirs="false" todir="bin">
<fileset dir="main/src">
<exclude name="**/*.launch"/>
<exclude name="**/*.java"/>
</fileset>
</copy>
<copy includeemptydirs="false" todir="bin">
<fileset dir="main/test">
<exclude name="**/*.launch"/>
<exclude name="**/*.java"/>
</fileset>
</copy>
</target>
<target name="clean">
<delete dir="bin"/>
</target>
<target depends="init" name="build">
<echo message="${ant.project.name}: ${ant.file}"/>
<javac debug="true" debuglevel="${debuglevel}" destdir="bin" includeantruntime="false" source="${source}" target="${target}">
<classpath refid="MyProject.classpath"/>
<src path="main/src"/>
<src path="main/test"/>
<compilerarg value="-Xlint"/>
</javac>
</target>
<!--Test the app-->
<target depends="build" name="regression">
<junit>
<classpath refid="MyProject.classpath"/>
<test name="uni.my.app.TestSuite"/>
</junit>
</target>
<!--Run the app-->
<target depends="build" name="run">
<java classname="uni.my.app.Application">
<classpath refid="MyProject.classpath"/>
<arg value="sentences.txt"/>
</java>
</target>
</project>
불행하게도, 내가 함께 최소 깨는 예를 넣을 수 없습니다 :
다음은 내 개미 파일입니다. 내가 작업중인 코드는 아직 공개되지 않았으므로 아직 공유 할 수는 없습니다. 여러 개의 jar (충돌하는 네임 스페이스가 없음)를 참조하고 일부는 원시 메소드를 참조합니다. 클래스와 jar의 정확한 조합이 오류를 일으키는 지 알 수 없습니다. 나는 jdk 1.6.0_25와 1.7.21을 사용하여 같은 문제를 겪었다.
누구든지이 문제를 해결하는 방법에 대한 경험이나 아이디어가 있습니까?
감사합니다. 이것은 직접적으로 문제를 해결하지 못했지만 문제를 발견하게했습니다 (잠시 후 게시 할 예정입니다). –