如何从我打包为战争的项目的一部分创建一个jar

我是Maven的新手,所以如果这是微不足道的话,我道歉。 基本上,我正在开发一个webapp,我正在使用Maven来管理项目。 我在我的pom.xml中有war ,这样当我运行mvn package ,它会吐出一个war文件在Web服务器上部署。

现在,作为此应用程序的一部分,我们使用第三方库作为战争交付给我们,它在Web服务器上单独部署。 这场战争包括我们编码的一些自定义集成function。 对于持久性逻辑,我最初只是在这个集成代码中直接编写了一个存储库。 当我发现我需要更多的持久性逻辑(超过基本的SELECT)时,我发现我想要使用在我们的应用程序代码中找到的存储库和域对象。 所以,理想情况下,我希望能够包装我们的核心软件包,然后在第三方战争中包含该jar,这样我就可以在那里使用相同的function。

我只是不知道如何设置pom.xml来告诉它我在这个jar中想要什么包(如果需要的话甚至只需要1个包),以及如何创建jar本身。 有没有办法从一个项目中的特定包生成一个jar,该项目设置为将整个项目打包为战争?

我找到了有关Maven jar插件的信息 ,但它说,“如果项目的包装设置为’jar’,那么只要它通过”包“阶段就会执行此插件。” 我项目中的包装没有设置为jar。 还有一些方法可以使用这个插件吗?

您可以创建一个多模块项目,其中一个模块包含您的域类,另一个模块是您的Web应用程序。 通过这样做,您的外部第三方war可以通过包含该jar来使用您的域类。

这是目录结构的简单概述:

 。
 ├──pom.xml
 ├──域名
 |  ├──pom.xml
 |  └──src
 |  └──主要
 |  └──java
 |  └──com
 |  └──stackoverflow
 |  └──域名
 |  ├──DoDao.java
 |  └──AnotherDao.java
 └──网络
     ├──pom.xml
     └──src
         └──主要
             ├──java
             |  └──com
             |  └──stackoverflow
             |  └──网络
             |  └──SearBackingBean.java
             └──webapp
                 └──WEB-INF
                     └──web.xml

的pom.xml

  4.0.0 com.stackoverflow Q12576767 1.0-SNAPSHOT pom ${project.artifactId}-${project.version}  domain web      com.stackoverflow Q12576767-domain ${project.version}     

域/ pom.xml的

  4.0.0  com.stackoverflow Q12576767 1.0-SNAPSHOT  Q12576767-domain ${project.artifactId}-${project.version}  

网络/ pom.xml的

  4.0.0  com.stackoverflow Q12576767 1.0-SNAPSHOT  Q12576767-web war ${project.artifactId}-${project.version}   com.stackoverflow Q12576767-domain    

通过这种方式,您可以解耦一些依赖项,并可以重用domain模块中的jar文件。


最后,你可以看看使用Overlays来创建一场war ,将第三方war与你自己的war重叠。 我不知道你的设置是否可行,但值得一看。 我成功地使用了它。

我不认为你可以从一些包创建一个jar文件,因为pom文件属于一个java / web项目而不是java项目中的单个包。 您可以创建一个名为xyz-common的新Java项目,该项目应具有与其他war文件共享的代码。 然后你可以简单地做mvn install,你的xyz-common jar将用一些版本创建。 然后更新war文件的pom文件,该文件需要您的公共jar及其依赖项。

我假设你的java包在war文件中? 如果是这样,最好创建一个新的java项目,并且不要将java代码与war文件紧密耦合。 在war文件中,只需提及jar文件的依赖关系。

您是否尝试使用mvn archetype:generate命令生成项目? 它为战争包装的webapps构建了一个完整的项目结构:

 mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-webapp -DarchetypeArtifactId=maven-archetype-webapp 

使用maven-jar-plugin,请参阅:

例:

   org.apache.maven.plugins maven-jar-plugin   **/service/*     make-a-jar compile  jar