我是Maven的新手,所以如果这是微不足道的话,我道歉.基本上,我正在开发一个webapp,我正在使用Maven来管理项目.我<packaging>war</packaging>在我的pom.xml中,以便在运行时mvn package,它会吐出一个war文件以在Web服务器上部署.
现在,作为此应用程序的一部分,我们正在使用作为战争交付给我们的第三方库,它将单独部署在Web服务器上.这场战争包括我们编码的一些自定义集成功能.对于持久性逻辑,我最初只是在这个集成代码中直接编写了一个存储库.当我发现我需要更多的持久性逻辑(超过基本的SELECT)时,我发现我想要使用在我们的应用程序代码中找到的存储库和域对象.所以,理想情况下,我希望能够包装我们的核心软件包,然后在第三方战争中包含该jar,这样我就可以使用相同的功能.
我只是不知道如何设置pom.xml来告诉它我在这个jar中想要什么包(如果需要,甚至只需要1个包),以及如何创建jar本身.有没有办法从一个项目中的特定包生成一个罐子,该项目设置为将整个项目打包为战争?
我找到了有关Maven jar插件的信息,但它说,"如果项目的包装设置为'jar',那么只要它通过"包"阶段就会执行此插件." 我的项目中的包装没有设置为jar.还有一些方法可以使用这个插件吗?
您可以创建一个多模块项目,其中一个模块包含您的域类,另一个模块是您的Web应用程序.通过这样做,您的外部第三方war可以使用您的域类,只需包括它jar.
这是目录结构的简单概述:
.
??? pom.xml
??? domain
| ??? pom.xml
| ??? src
| ??? main
| ??? java
| ??? com
| ??? stackoverflow
| ??? domain
| ??? SomeDao.java
| ??? AnotherDao.java
??? web
??? pom.xml
??? src
??? main
??? java
| ??? com
| ??? stackoverflow
| ??? web
| ??? SomeBackingBean.java
??? webapp
??? WEB-INF
??? web.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.stackoverflow</groupId>
<artifactId>Q12576767</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>${project.artifactId}-${project.version}</name>
<modules>
<module>domain</module>
<module>web</module>
</modules>
<dependencyManagement>
<dependencies>
<!-- Inter-Module dependencies -->
<dependency>
<groupId>com.stackoverflow</groupId>
<artifactId>Q12576767-domain</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
Run Code Online (Sandbox Code Playgroud)
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.stackoverflow</groupId>
<artifactId>Q12576767</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>Q12576767-domain</artifactId>
<name>${project.artifactId}-${project.version}</name>
</project>
Run Code Online (Sandbox Code Playgroud)
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.stackoverflow</groupId>
<artifactId>Q12576767</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>Q12576767-web</artifactId>
<packaging>war</packaging>
<name>${project.artifactId}-${project.version}</name>
<dependencies>
<dependency>
<groupId>com.stackoverflow</groupId>
<artifactId>Q12576767-domain</artifactId>
</dependency>
</dependencies>
</project>
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以解耦一些依赖项,并可以重用模块中的jar文件domain.
最后,您可以使用Overlays来创建一个,war通过将第三方war与您自己的第三方重叠来创建一个war.我不知道你的设置是否可行,但值得一看.我成功地使用了它.
| 归档时间: |
|
| 查看次数: |
4723 次 |
| 最近记录: |