我正在努力使我的Java应用程序模块化,以便客户端将拥有核心基础模块,但是他/她将能够在它们出现时添加其他功能/插件,或者随着她的需求扩展。就像NetBeans这样的IDE一样。
这是我尝试使用Maven实现这一目标的程度:
我首先将自己定位在工作区目录中,然后通过发出以下Maven命令来创建主(或父项目):
mvn archetype:create -DgroupId=com.byteslounge.main -DartifactId=com-byteslounge-main
现在我删除了src文件夹,因为它不会被使用。在此之后,我编辑我的pom.xml文件并将jar更改为pom。
创建主项目后,我创建了主库模块。这是用户通过添加其他模块来下载和添加扩展的内容。从主项目目录中,我发出以下Maven命令:
mvn archetype:create -DgroupId=com.byteslounge.jar -DartifactId=com-byteslounge-jar
现在我通过发出以下命令创建第一个模块:
mvn archetype:create -DgroupId=com.byteslounge.lib -DartifactId=com-byteslounge-lib
每当调用上面的主程序com-byteslounge-jar时,都应调用此模块。
如何在maven中编译项目,以便在运行com-byteslounge-jar时调用所有模块?
PS:
这是解决此问题的最佳方式,考虑到我稍后需要通过在此项目中实现ServiceLoader Class来实现全自动化。我打算在客户端pc中有一个名为modules / plugins的子目录,其中任何插件应用程序都将作为.jar文件包含在内。当用户启动应用程序时,主模块(com-byteslounge-jar)将在最终的单个程序中包含这些其他插件。
答案 0 :(得分:1)
扩展@ jan-doerrenhaus在评论中提供的链接。
您的顶级pom应该引用两个子文件夹作为' modules'使用这样的东西:
class node {
public:
node(){
value = 0;
arr = new node*[26];
for(int i =0 ; i<26;i++)
arr[i]= NULL;
}
int value;
node ** arr ;
};
class trie {
public:
trie(){
root = NULL;
}
node * root;
int count;
};
int main(){
string A[5] = {"apple, ball , bat , cat, car"};
trie* too;
node *p = new node();
too->root = p; // **here**
}
然后,您需要从顶级目录构建项目。 Maven将自动计算依赖性排序,以正确的顺序编译项目。
很难从你的问题中判断,但你可能在错误的目录中创建子项目 - 你应该为每个子项目创建一个文件夹,然后运行{{1}在子目录中。你应该有一个看起来像这样的目录结构
<modules>
<module>com-byteslounge-jar</module>
<module>com-byteslounge-lib</module>
</modules>