Можно ли написать плагин Eclipse, что:затмение плагина создание классов из используемого исходного кода Jar в
Всякий раз, когда в нашем коде мы используем
ClassA.staticMethod1();
(ClassA
приходит из включенной внешней баночки)Плагин создает
ClassA
в нашем проекте.Он копирует только один использованный метод (и все необходимые импорты и зависимые методы) от jar до только что созданного
ClassA
- методы класса Unneeded не копируются в проект и все еще находятся во внешней банке.При удалении банки все работает нормально.
Какое у вас решение для этого?
заранее спасибо
EDIT прояснить для @ Турбьёрна Равн Андерсен:
данный класс в баночке:
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;
}
}
Этот класс (в проекте источников) , который использует только часть (в этом случае 1 метод, который использует другой метод) этого класса jar:
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;
}
}
Резюмируем:
2 (4 всего) способа, где это необходимо, таким образом, они будут скопированы.
4 (всего 6 единиц) импортирует туда, где это необходимо, поэтому они также копируются.
остальной класс ATM бесполезна, поэтому все остальное не копируется.
EDIT2: Я добавил щедрость, как знак того, что я хочу найти решение этой проблемы, которая, я считаю, может быть полезной с открытым исходным кодом. :)
Вам нужен автоматический генератор-заглушка? –
@ Thorbjørn Ravn Andersen, мне нужно скопировать код из банки, но только столько, сколько необходимо для компиляции и работы. Я не хочу включать эту банку в окончательную сборку. – dantuch
Я знаю, что некоторые инструменты доступны для выполнения этой задачи (я забыл их имена). Тем не менее, это сложное упражнение, например: что, если ваш статический метод dymanically создает имя класса и загружает класс через отражение? – home