动态(编译时生成的)Java包名称

动态(编译时生成的)Java包名称,java,android,build-process,Java,Android,Build Process,我正在开发一个通用的Android游戏引擎,它将在我的许多Android应用程序中用作基本系统。问题是,在我的所有Java文件中,我当前必须对包名进行硬编码,如下所示: package com.example.mygameengine; package $(PACKAGE_NAME) 但是,因为我想在许多不同的应用程序中使用我的通用游戏引擎的代码,我需要找到一种方法在编译时为Java文件指定包名,因为我不想仅仅因为包名不同而保留Java源代码的多个副本。我希望有一个中心源代码树,包名应该根据

我正在开发一个通用的Android游戏引擎,它将在我的许多Android应用程序中用作基本系统。问题是,在我的所有Java文件中,我当前必须对包名进行硬编码,如下所示:

package com.example.mygameengine;
package $(PACKAGE_NAME)
但是,因为我想在许多不同的应用程序中使用我的通用游戏引擎的代码,我需要找到一种方法在编译时为Java文件指定包名,因为我不想仅仅因为包名不同而保留Java源代码的多个副本。我希望有一个中心源代码树,包名应该根据我将要编译的应用程序动态更改

那么有没有办法做到这一点:

package com.example.mygameengine;
package $(PACKAGE_NAME)
在Java源代码中,在编译时用真实的包名替换$(PACKAGE_NAME)?也许javac有一个选项,允许我为它传递的文件指定一个包名,而不是从文件本身获取它?请注意,我并没有使用Eclipse,而是使用诸如ant和make之类的基本命令行工具


编辑:我不明白为什么这被标记为重复。我问了一个基本问题,Java语言中的“package”指令是否需要源代码中的硬编码字符串参数,或者是否也可以在编译时使用编译器指令设置此包名。这是一个完全不同的问题,与这里被链接为假定的“原始”问题的问题相比,后者与Android构建系统的关系更为密切。我的问题是关于Java语言的基础知识,而不是关于Android构建系统。

这是不可能的,因为它是关于类的核心元数据的一部分

包是相关Java实体(如类、接口、异常、错误和枚举)的集合。软件包用于:

通过在类名前加上包名来解决类的命名冲突。例如,com.zzz.Circle和com.yyy.Circle是两个不同的类。虽然它们共享相同的类名圈,但它们属于两个不同的包:com.zzz和com.yyy。这两个类可以在同一个程序中使用,并使用完全限定的类名-包名加类名来区分。这种机制称为命名空间管理

访问控制:除了public和private之外,Java还有两个与包相关的访问控制修饰符——protected和default。受保护的实体可由同一包及其子类中的类访问。没有访问控制修饰符(即默认值)的实体只能由同一包中的类访问


用于分发可重用类的集合,通常采用称为Java Archive(JAR)文件的格式。

这是不可能的,因为它是类的核心元数据的一部分

包是相关Java实体(如类、接口、异常、错误和枚举)的集合。软件包用于:

通过在类名前加上包名来解决类的命名冲突。例如,com.zzz.Circle和com.yyy.Circle是两个不同的类。虽然它们共享相同的类名圈,但它们属于两个不同的包:com.zzz和com.yyy。这两个类可以在同一个程序中使用,并使用完全限定的类名-包名加类名来区分。这种机制称为命名空间管理

访问控制:除了public和private之外,Java还有两个与包相关的访问控制修饰符——protected和default。受保护的实体可由同一包及其子类中的类访问。没有访问控制修饰符(即默认值)的实体只能由同一包中的类访问


用于分发可重用类的集合,通常采用称为Java Archive(JAR)文件的格式。

您可以将通用游戏引擎代码构建到独立的JAR中

然后,您可以将其作为依赖项包含到每个使用它的Android应用程序中


通过适当的版本控制,您将只有一个存储此代码的中心位置。

您可以将通用游戏引擎代码构建到一个独立的JAR中吗

然后,您可以将其作为依赖项包含到每个使用它的Android应用程序中


有了正确的版本控制,您将只有一个存储此代码的中心位置。

您不能。这不是代码重用的正确方法


只需将您常用的代码打包到一个jar中,并将该jar包含在您想要的每个项目中(在Android中,您可以通过将类添加到类路径,然后在“Order&Export”选项卡中将其标记为导出来实现这一点)

您不能。这不是代码重用的正确方法


只需将您常用的代码打包到一个jar中,并将该jar包含在您想要的每个项目中(在Android中,您可以通过将类添加到类路径中,然后在“Order&Export”选项卡中将其标记为已导出)

或者即使您没有将其放入单独的jar中,您可以在主jar文件中捆绑来自不同包的类。或者,即使您没有将其放入单独的jar中,也可以在主jar文件中捆绑来自不同包的类。这是一个非常糟糕的主意。只要在任何地方使用相同的包名,并将相同的类绑定到不同的应用程序中即可。这并不是说每个应用程序中的
java.util
都将使用不同的包名,是吗?我希望您实际上没有使用
com.example
作为包前缀。这是一个非常糟糕的主意。只要在任何地方使用相同的包名,并将相同的类绑定到不同的应用程序中即可。这并不是说每个应用程序中的
java.util
都将使用不同的包名,是吗?我希望您实际上没有使用
com.example
作为包前缀。