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

dnc*_*253 5 java jar maven

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

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

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

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

mab*_*aba 5

您可以创建一个多模块项目,其中一个模块包含您的域类,另一个模块是您的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

的pom.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)

域/ pom.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>

    <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)

网络/ pom.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>

    <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.我不知道你的设置是否可行,但值得一看.我成功地使用了它.