如何使用Maven

时间:2015-11-17 22:15:30

标签: java maven jar module

我正在努力使我的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)将在最终的单个程序中包含这些其他插件。

1 个答案:

答案 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>