如何从我打包为战争的项目的一部分创建一个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