我是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
<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>
<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>
<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>
通过这种方式,您可以解耦一些依赖关系,并可以jar
从domain
模块中重用文件。
最后,您还可以查看使用叠加层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项目。 我怎样才能最好地在周期性的基础上包括战争的自动(比如每周构建)构建。有插件吗?