이클립스 플러그인을 작성이 가능할 것이다 :이클립스 플러그인은
우리의 코드에서 우리는ClassA.staticMethod1();
(ClassA
포함 외부 항아리에서 온) 사용할 때마다
플러그인은 프로젝트에서
ClassA
을 생성합니다.jar에서 새로 생성 된 객체 인
ClassA
만 사용합니다. 불필요한 클래스 메소드는 프로젝트에 복사되지 않고 여전히 외부 병에 있습니다.항아리가 제거되면 모두 정상적으로 작동합니다.
해결 방법은 무엇입니까? 사전에
감사
편집는 @ Thorbjørn Ravn 안데르센에 대해 명확히 :
지정된 클래스가 항아리에 있습니다 (소스 프로젝트)
package com.ext.jar;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class Utilities {
public static Object giveFirstThing(){
// some random method content to show what has to be removed and what has to stay
List list = new ArrayList();
Object o = doThis();
return null;
}
public static Object giveSecondThing(){
List list = new LinkedList();
Object o = doThat();
return null;
}
private static Object doThis(){
Map<Integer, String> myMap = new HashMap<Integer, String>();
return null;
}
private static Object doThat(String ... param){
Set set;
return null;
}
}
이 클래스 그 jar 클래스의 부분 (이 경우 다른 메소드를 사용하는 1 개의 메소드) 만 사용합니다 :
package com.foo.bar;
import com.ext.jar.Utilities;
public class Runner {
public static void main(String[] args) {
Utilities.giveFirstThing();
}
}
결과입니다 : 항아리에서 클래스는 내가 필요하지 않았다, 방법 및 수입하지 않고, 일반 컴파일 가능한 클래스로, 내 프로젝트에서 다시 만들어집니다 (그래서 항아리 안전 프로젝트에서 제거 할 수 있습니다) :
package com.ext.jar;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Utilities {
public static Object giveFirstThing(){
// some random method content to show what has to be removed and what has to stay
List list = new ArrayList();
Object o = doThis();
return null;
}
private static Object doThis(){
Map<Integer, String> myMap = new HashMap<Integer, String>();
return null;
}
}
SUM UP :
2가 복사되도록, 필요한 방법 (총 4).
(총 6 개) 필요한 곳에서 가져 오기 때문에 복사됩니다.
나머지 클래스는 ATM에서 쓸모가 없으므로 나머지는 복사되지 않습니다.
EDIT2 : 내가이 오픈 소스 프로젝트에 도움이 될 수 있다고 믿는이 문제에 대한 해결책을 찾고 싶다는 표시로 bounty를 추가했습니다. :)
자동 스텁 생성기가 필요합니까? –
@ Thorbjørn Ravn Andersen, jar에서 코드를 복사해야하지만 컴파일하고 작업하는 데 필요한만큼만 복사해야합니다. 최종 빌드에이 항아리를 포함시키고 싶지 않습니다. – dantuch
나는 그 일을 성취 할 수있는 도구가 있다는 것을 알고있다. (나는 그들의 이름을 잊었다). 그럼에도 불구하고 이것은 힘든 훈련입니다. 예를 들어, 정적 메서드가 동적으로 클래스 이름을 만들고 리플렉션을 통해 클래스를로드하면 어떻게됩니까? – home