tua*_*uan 5 java aspectj variant pruning
让我从我想做的事情开始,然后提出一些问题.
我想开发一个通用的Java程序,它是许多程序的超集(让我们称之为程序变体).特别地,通用程序具有仅由一个或多个程序变体(但不是全部)使用的方法.给定一个特定的配置,我想删除不必要的方法,并为一个程序变量保留最小的方法集.
例如,我有一个通用程序如下:
public class GeneralProgram {
// this method is common for all variants
public void method1() {};
// this method is specific to variant 1
public void method2() {};
// this method is specific to variant 2
public void method3() {};
}
Run Code Online (Sandbox Code Playgroud)
然后在基于变体1的配置修剪程序之后,结果是
public class GeneralProgram {
// this method is common for all variants
public void method1() {};
// this method is specific to variant 1
public void method2() {};
}
Run Code Online (Sandbox Code Playgroud)
结果类名称是否与原始类名称相同无关紧要.我只想修剪课程内容.
所以,这是我的问题:
除了低级文本处理之外,您是否知道如何实现这一目标?
我知道我可以使用aspectJ在运行时禁用/启用特定方法,但我真正想要做的是在部署程序之前执行此任务.为此目的,Java中是否有任何技术?
在我看来,这里正确的解决方案是使用一些面向对象的编程并将您的程序分层:
base.jar包含:
package foo.base;
class GeneralProgram {
public void method1(){ }
}
Run Code Online (Sandbox Code Playgroud)
var1.jar包含:
package foo.var1;
import foo.base.GeneralProgram;
class GeneralProgramVar1 extends GeneralProgram {
public void method2(){ }
}
Run Code Online (Sandbox Code Playgroud)
var2.jar包含:
package foo.var2;
import foo.base.GeneralProgram;
class GeneralProgramVar2 extends GeneralProgram {
public void method3(){ }
}
Run Code Online (Sandbox Code Playgroud)
一些部署将同时具有base.jar和var1.jar,其他部署将具有base.jar和var2.jar.您将不得不使用类路径来解决依赖关系.
如果你可以很好地分离你的变种,以便有真正未使用的函数,那么你可以使用像ProGuard这样的压缩实用程序从类中删除未使用的方法.但是,您可能会发现,获得ProGuard优势所需的工作与我上面推荐的结构相同.
归档时间: |
|
查看次数: |
1198 次 |
最近记录: |