2012-04-09 3 views
0

현재 Java 프로젝트에서 "fr.inria.arles.pankesh.gen"패키지의 일부 Java 파일을 "fr.inria.arles.pankesh.impl"패키지에 복사하는 Java 프로그램을 작성했습니다.Java 코드를 통해 패키지 정보를 변경하는 방법은 무엇입니까?

"fr.inria.arles.pankesh.genpl"패키지에서 "fr.inria.arles.pankesh.impl"패키지로 Java 파일을 복사 한 후 Java 파일의 패키지 정보 변경으로 인해 Java 파일에 오류가 발생했습니다. .

내 질문은 "내 프로그램이"fr.inria.arles.pankesh.gen "패키지에서"fr "패키지로 Java 파일을 복사 할 때 헤더에 패키지 정보 (수동으로가 아니라 Java 코드를 통해)를 변경할 수있는 방법이 있습니까? .inria.arles.pankesh.impl ". 당신이 자바 소스 파일을 복사하는 경우

+4

당신은 몇 가지 질문에 대한 답변을 받아 들여야한다. – DrColossos

+0

아니, 하나 모든 패키지 문을 편집하거나 리팩토링 기능이있는 실제 IDE를 사용해야합니다. – duffymo

+2

@duffymo Eclipse는 Java로 작성되었으며, ctoring 기능은 패키지 선언의 이름을 바꿉니다. 이렇게하는 방법이 있습니다. – Jeffrey

답변

3

, 당신은

  1. 오픈 소스 파일이 필요합니다.
  2. 대상 파일을 엽니 다.
  3. package 키워드가 나타날 때까지 원본에서 대상으로 모든 것을 복사하십시오.
  4. 패키지 키워드를 대상 파일에 복사하십시오.
  5. 대상 파일에 소스 파일의 내용의 나머지를 쓰기 소스 파일
  6. 에서 "잘못된"패키지 위치를 통해 건너 뛰기 대상 파일에 "corrrect"패키지 위치를 작성합니다.

이렇게하면 파일의 패키지가 올바르게 리베이스됩니다. "이전"패키지에서 해당 파일을 찾을 것으로 예상 할 수있는 다른 파일을 "리베이스 (rebase)"하지 않습니다. 이러한 다른 파일을 수정하려면 프로젝트가 너무 많은 참조를 갖지 않도록 설계되었거나 모든 파일을 복사하려는 경우 프로젝트에서 "이동 된"클래스를 찾으려면 각 파일을 열어야합니다. import 성명 찾으면 이 아니야 가져 오기를 복사하지만 올바른 바꾸기로 복사하십시오.

"이동"하지는 않지만 변경해야하는 파일을 작업 할 때는 임시 파일을 작성한 다음 임시 파일이 완전히 작성된 후 원본을 임시 파일로 바꾸는 것이 가장 좋습니다 . 그래서 같이 :

(reading) MyClass.java 
(writing) .tempMyClass.java 
(done writing) 
(moving) .tempMyClass.java to MyClass.java 

이것은 당신이에서 읽을 필요로하는 곳에 파일 과거의 기록처럼, 불쾌한 항목의 수에 의해 제한 될 수 있습니다 (당신이 그것을 읽기 전에 필요한 정보를 파괴 할 것이다).

패키지 java.io 및 클래스 java.lang.String에는 이러한 도구를 쓸 수있는 모든 유틸리티가 있지만 자세한 내용은 너무 긴 게시물입니다. 조금만 작성하고, 웹을 검색해보십시오. (자바로 파일에서 라인을 읽는 법, 자바로 파일에 라인을 작성하는 방법) 여러분이 얼마나 멀어 졌는지에 대한 코드를 게시하십시오. 오류 또는 오해가 있으며 많은 사람들이 기꺼이 도와 드리겠습니다.

이미 컴파일 된 파일에 대해이 작업을 수행하려면 Java 클래스 파일 형식을 약간 읽은 다음 클래스 이름 상수 문자열을 찾아 위의 유사한 절차에 따라 변경해야합니다. 바이너리 바이트를 쓰게 될 것입니다.) 또는 ASM과 같은 라이브러리를 사용하여 위와 같은 절차를 수행 할 수 있습니다 (그러나 아마도 수동으로 할 때 실수를 저지를 수 있습니다).

+0

이것은 매우 지루하고 긴 해결책입니다. 나는 그것을 받아들이지 만, 내 맥락에는 관련이 없다. – Pankesh

+0

지루하고 긴 해결책입니다. 그러나 그것은 당신이하고 싶은 것과 정확히 일치하기 때문에 당신의 상황과 정확히 관련이 있습니다. 이것을하지 않고 Java 언어 스펙을 존중하는 다른 방법을 찾을 수 있다면 자신의 질문에 대한 답변으로 작성하십시오. 이제 지루한 부분은 이것을 자동화하는 Java 프로그램을 작성하여 처리 할 수 ​​있지만 _less_ 작업을 수행 할 수 없으며 유효한 Java 프로젝트가 아니므로 최종 결과가 컴파일 될 것으로 예상 할 수 없습니다. –

1

당신은 (당신의 의견이나 문자열의 package 단어가있을 때 단지 고려, 그것은 쉬운 일이 아닙니다) 많은 노력과

  1. 당신에게 자바 파일을 구문 분석하는 것을 수행하고 업데이트 할 수 있습니다.
  2. 그리고 이들을 참조하는 모든 클래스를 업데이트해야합니다 (더 어렵습니다. 가져 오기 명령문을 변경하고 정규화 된 클래스 이름을 변경하며 동일한 패키지 내의 클래스에 가져 오기 명령문을 추가해야하기 때문입니다. import 문).

은 당신이 사용하고 IDE (이클립스, 넷빈즈 또는 IDEA로)과 리팩토링 기능을 사용하는 것이 좋습니다.

관련 문제