2012-11-09 31 views
1

即时通讯使用Adobe®Flash®Builder™4.6,但在以前的版本中也存在此问题。如何强制编译器编译我的项目中的所有类?

出于某种原因,我使用

cls = applicationDomain.getDefinition(name) as Class; 

获取对象的构造函数,然后创建我的模块class.thus使编译忽略我模块类实例,因为他们没有从我的主类相关。如何强制其他类也编译成我的SWF或SWC文件?我没有找到我可以调整我的编译选项。

现在我用这种方式来解决我的问题,在程序入口的最开始。

if(1+1==3){ 
    //never be run but do make classes merge into swf files. 
    new MyModule(); 
} 

我有数百个这样的一个模块,我真希望能找到一种方法来解决这个问题的永久

回答

1

你可以用这个

package 
{ 
public class IncludeClasses 
{ 
    import com.abc.db.Database;Database; 
    import com.abc.logs.KBRemoteLogTarget; KBRemoteLogTarget; 
    import com.abc.logs.KBLocalLogTarget; KBLocalLogTarget; 
    import com.abc.exception.GlobalExceptionHandler; GlobalExceptionHandler; 
    import com.abc.utils.NetConnectionMonitor;NetConnectionMonitor; 
} 
} 
+0

到目前为止最好。你可以简单地使用com.abc.db.Database;不需要导入。 – Max

+1

oops,即时错误,必须添加导入。您不必添加;最后。 – Max

+0

我认为我们最后需要添加类名,否则在编译时flex编译器会忽略这些类,所以你不能使用反射API。 –

2

您需要使用类来得到它在SWF编译。
不是最好的方法,但

private var someVar:someClass; 


使用“new”关键字将导致运行时为对象分配内存,所以你不想使用。


这整个加载模块和编译类都有代码味道。
您最好让模块中的类实现一个接口。

+0

你的方式比我好。 – Max

1

您至少需要一个严格的参考才能出现在项目中。我使用一个Array类型的静态变量来填充我需要的所有类,并且如果可以的话,从不真正引用该数组。

private static var dummy:Array=[OneClass, AnotherClass, Class01, Etc]; 
+0

这一个更好,你可以在一个函数中将虚拟变量设置为非静态局部变量吗?我试过了,它适用于我。我不知道它会继续工作,需要更多的测试。 – Max

+0

很可能它确实可以在一个函数中工作。一旦你从项目的任何地方获得了你的班级的链接,你就可以从任何地方到达。 – Vesper

0

尝试你还可以通过设置你的编译器标志做到这一点。 About the application compiler options

参见: 包括 - 库库[...]

只包括是该 附带包括类编译器选项类继承的依赖类。

默认值为false。

这是一个高级选项。如果 正在创建自定义RSL,并且想要将 尽可能多的类外部化,则可以使用此编译器选项。例如:

compc -include-classes mx.collections.ListCollectionView 
-include-inheritance-dependencies-only=true 
-source-path . -output lcv2 -directory