当前位置: 首页 > 面试题库 >

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

古文康
2023-03-14
问题内容

我是Maven新手,因此,如果这很琐碎,我深表歉意。基本上,我正在开发一个Web应用程序,并且正在使用Maven来管理项目。我<packaging>war</packaging>在pom.xml中拥有该文件,以便在运行时mvn package,它会吐出一个war文件以部署在Web服务器上。

现在,作为此应用程序的一部分,我们使用的是战争时交付给我们的第三方库,该库分别部署在Web服务器上。这场战争包括我们编写的一些自定义集成功能。对于持久性逻辑,我最初只是直接在此集成代码中编写了一个存储库。当我发现我需要更多的持久性逻辑(而不是基本的SELECT)时,我发现我想使用在我们的应用程序代码中找到的存储库和域对象。因此,理想情况下,我希望能够打包我们的核心程序包,然后将其包含在第3方战争中,以便在那里具有与我相同的功能

我只是不知道如何设置pom.xml来告诉它我需要在此jar中使用哪些包(如果需要,甚至只需要1个包),以及如何创建jar本身。有没有一种方法可以从项目中的特定程序包中生成一个jar,该jar设置为将整个项目打包为战争?

我找到了有关Maven jar插件的信息,但它说:“如果您的项目的包装设置为’jar’,则只要该插件通过“打包”阶段,就会执行该插件。”
我项目中的包装未设置为jar。还有使用此插件的方法吗?


问题答案:

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

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

。
├──pom.xml
├──域
| ├──pom.xml
| └──src
| └──主要
| └──java
| └──com
| └──stackoverflow
| └──域
| ├──SomeDao.java
| └──AnotherDao.java
└──网页
    ├──pom.xml
    └──src
        └──主要
            ├──Java
            | └──com
            | └──stackoverflow
            | └──网页
            | └──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>

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

web / 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>

通过这种方式,您可以解耦一些依赖关系,并可以jardomain模块中重用文件。

最后,您还可以查看使用叠加层war通过将第3方war与您自己的叠加层来创建叠加层war。我不知道您的设置是否可行,但值得一看。我已经成功使用了它。



 类似资料:
  • 我使用的是Eclipse BuildshipV2.1.2用于Gradle。我有两个独立的web项目,P1和P2,还有一个项目,P3,它作为所有其他项目的依赖项。我的任务是创建一个主构建,用它可以从P1和P2构建和生成WAR文件,并从P3生成JAR文件。我应该包含这个P3 jar文件作为P1和P2的依赖项。我创建了一个, null P2 Build.Gradle settings.gradle Bu

  • 问题内容: 我有一个Java Web项目,我们部署在两个不同客户的服务器上,其中99%的代码是相同的,现在我有两个ApplicationBuilder,该类包含为每个客户定制的类。 每当我要部署新版本时,我都必须手动注释一行,使用maven进行构建,取消注释该行,注释另一行,然后再次构建。 我想避免所有这些,最好的事情可能只是造成两次不同的战争。 有什么好方法吗?我不使用(也不喜欢)依赖注入框架,

  • 1984年1月,Richard Stallman 辞去了 MIT 的工作,他担心 MIT 会要求产品的所有权,会给产品强加入自己的销售条件,最终又会成为专有软件。一开始, GNU 计划只有他一个人。他发现自己原来在人工智能实验室的办公室,还没有分给其他人用时,他就每天晚上溜进去工作。久而久之,白天他也跑去用实验室里的电脑。 当时人工智能实验室主任 PatrickH. Winston 并不干涉。因为

  • 有人能给我一个解决方案吗?除了以下例外。我将创建一个多模块项目。 父项目名称为 ,子项目名称为 、 和 。 我需要有的war文件,其中应该包含、和。jar文件。 但是maven必须在父项目中打包。我怎样才能创建这样的项目?

  • 首先,打开Android Studio并选择Create new Project,然后它会让你输入一个名字,你可以任意取一个名字,比如:Weather App。然后你需要输入公司域名。如果你不会真正发布这个app,这个字段就不是特别重要了,但是如果你有的话可以使用自己的域名。然后任意选择一个目录作为这个项目的保存地址。 下一步,它会让你选择最小的API版本。我们选择API 15,因为我们有一个库需

  • 我在GGTS上有我的Grails项目。 我怎样才能最好地在周期性的基础上包括战争的自动(比如每周构建)构建。有插件吗?