소스 코드를 잃어버린 병이 있습니다. 항아리를 디 컴파일하고 새로운 항아리를 만들었습니다. 그런 다음 소스 코드와 이전 jar가 동일한 동작을하는지 확인하려고합니다. 나는 단위 테스트를 작성하여 문제가 그들 둘 다 동일한 네임 스페이스/클래스 이름을 갖기 때문에 오래된 jar와 새로운 소스 코드를 모호하게하는 방법을 모르겠다. 나는 무엇을 할 수 있습니까, 불가능합니까?Java : 네임 스페이스 충돌 해결
답변
해당 코드 버전을 실행하는 것을 보장하려면 클래스 경로에 한 번만 있어야합니다. 코드와 별도로 단위 테스트를 개발하여 어느 버전 으로든 드롭 할 수 있습니다.
새로운 소스에 테스트 용으로 임시 네임 스페이스를 지정하십시오.
com.yourfirm.test.packagename.TheClassName
오래된 것들은 단순히 TheClassName
로 가져온 대해 참조 할 수 있습니다 : 그럼 대신 수입, 당신은 귀하의 새로운 클래스를 참조 할 수 있습니다. 이 방법을 통해 테스트 사례를 살펴봄으로써 알 수 있습니다.
또는 단순히 -cp oldpackage.jar
및 다음으로 -cp newpackage.jar
으로 테스트를 실행하십시오.
테스트에서 빌드 코드를 자동화해야하므로이 작업을 수행 할 수 없습니다. – Bishnu
클래스 패스를 사용하여 런타임에 테스트 할 클래스를 변경했습니다. 이 방법은 두 바이너리 모두에 대해 동일한 테스트 코드를 실행한다는 점에서 오류가 발생하기 쉽습니다. 그렇지 않으면 테스트가 올바른지에 대해 더 많은 복잡성이 생깁니다.
동시에 두 항아리 모두에 대해 테스트를 실행하려는 것 같습니다. 클래스 패스에 둘 다 있다면 이전/새로운 항아리를 모호하게하는 방법을 모르겠습니다.
출력 결과를 stdout/stderr로 테스트하는 경우 원래 jar에 대해 테스트를 실행하고 결과를 저장할 수 있습니다. 그런 다음 새 jar에 대해 테스트를 실행하고 결과를 별도의 파일에 저장하십시오. 그런 다음 파일을 diff하십시오.
또 다른 접근법은 고유 한 네임 스페이스를 갖도록 새 소스 코드를 리팩토링하는 것입니다. 그런 다음 두 항아리를 동시에 테스트 할 수는 있지만 기존 항아리를 사용하도록하는 작업이 많이 필요할 수 있습니다.
가능한 일이지만 클래스 로딩을해야합니다. 항아리 중 하나를 클래스 경로에 배치하는 대신 런타임에로드해야합니다. 도서관에서 이것을 할 수 있도록 JCL을 확인하십시오. (부인 : 나는 JCL을 사용한 적이 없다.)
기본적으로 각 테스트는 이전 JAR에서 클래스를로드하고 테스트중인 메소드의 결과를 가져온 다음 해당 JAR을 언로드하고 새 JAR를로드한다. 새 버전에 대해 동일한 메소드를 실행하고 결과를 비교하십시오.
ant (Junit-task)를 통해 테스트를 실행하는 경우 두 클래스의 실행에 대해 개별적으로 앤트 클래스 경로를 제어 할 수 있습니다 (jar를 통해 한 번, 클래스의 파일 세트를 통해 한 번).
- 1. Javascript 네임 스페이스 충돌
- 2. Xna와 System 네임 스페이스 충돌
- 3. actionscript ExternalInterface 네임 스페이스 충돌
- 4. 네임 스페이스
- 5. 네임 스페이스 ++
- 6. 네임 스페이스
- 7. 네임 스페이스
- 8. 해결 네임 스페이스는
- 9. C++, 다른 네임 스페이스
- 10. App Engine (Java)에서 네임 스페이스 삭제
- 11. 네임 스페이스의 클래스 충돌 - 제안
- 12. XJC 생성 네임 스페이스
- 13. JAXP XPathFactory 네임 스페이스
- 14. 템플리트 된 네임 스페이스 및 typedef는 비공식 - 해결 방법입니까?
- 15. JQuery로 XML 구문 분석을위한이 네임 스페이스 해결 방법 이해하기
- 16. 재미있는 네임 스페이스 예 .NET에서
- 17. 파이썬 : 패키지 가져 오기에서 네임 스페이스 충돌 외에도 단점이 있습니까?
- 18. 복제 문제 - 충돌 해결
- 19. 패키지 충돌 해결
- 20. viewstate/namespace 충돌 해결
- 21. 대량 충돌 해결
- 22. 간단한 svn 충돌 해결
- 23. 수동으로 패치 충돌 해결
- 24. C++ 이름 충돌 해결
- 25. subversive와의 병합 충돌 해결
- 26. C# .NET 네임 스페이스 이름이 네임 스페이스 오류에 없습니다. 로컬 네임 스페이스 지시문을 벗어난 경우에만 - 왜?
- 27. 봄 네임 스페이스 오류
- 28. Doxygen/C++ : 네임 스페이스 목록의 전역 네임 스페이스
- 29. 요소 속성 네임 스페이스 대신 XSLT 루트 태그 네임 스페이스
- 30. 전역으로 네임 스페이스 참조?
나는 이것을 할 필요가 없길 희망했지만, 그것은 유일한 apporach처럼 보입니다. – Bishnu