是否有可能从构建后具有“提供”范围的maven artifactory存储库中获取特定版本依赖关系jar.Due到这么多webapps并且大多数具有公共依赖关系,想到将所有依赖关系设置为“提供”(所以WEB-INF / lib是空的)并在部署期间从工件存储库中获取所有“提供的”特定版本的jar(部署的第一步是将jar复制到Tomcat common lib,然后进行war部署)。如果可能的话请通过在部署之前给模型脚本执行从存储库到tomcat common lib的复制来帮助我。
假设应用程序有3个webapp(webapp1,webapp2和webapp3),并且全部使用abc1.jar,abc2.jar,abc3.jar.each webapp classloader为每个war部署加载所有这3个部分。而不是将它们作为提供并保持我觉得Tomcat普通库中的3个罐子是合适的。现在我的问题是在maven构建之后,我可以从存储库提供罐子,使用shell脚本将它们从存储库复制到tomcat lib
http://maven.apache.org/maven-v4_0_0.xsd“> 4.0.0 com.group.groupid mSampleJDBCTempPrj 战争 0.0.1-SNAPSHOT mSampleJDBCTempPrj Maven Webapp http://maven.apache.org org.springframework 春天上下文 3.1.1.RELEASE CGLIB CGLIB 2.2.2
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>3.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>3.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.1-901-1.jdbc4</version>
</dependency>
</dependencies>
<build>
<finalName>mSampleJDBCTempPrj</finalName>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.9</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<!-- <includeScope>provided</includeScope> -->
<outputDirectory>/Users/venugopal/Documents/providedDependencies</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
答案 0 :(得分:1)
当想法是,创建一个包含jar的存档,在pom.xml
中标记为提供范围。因此,如果多个web-apps使用这些相同的jar,它们可以部署到wen容器提供程序(Tomcat / Jetty / JBoss / etc)的中心位置。
就我所知而言,Maven中没有选项可以为这些提供的依赖项创建存档。或者从Maven存储库中轻松提取它们的其他方法。
一个问题上升你为什么要这样做?现在很多项目都转移到Docker或类似的解决方案。在一个容器中只部署一个Web应用程序。因此,不需要搜索commin库并将它们放在Web容器上的复杂性。等等。
另一个问题为什么要增加复杂性。更简单的设置是将所有依赖的罐子添加到Web应用程序。作为磁盘空间和网络速度/容量,大多数时候都不是问题。
似乎已经提供了答案Getting jars from scope provided maven web project
提示以上示例显示了maven-dependency-plugin
的用法。它被配置为在阶段包(<phase>package</phase>
)期间运行
使用mvn clean package
,让它完成任务。
pom.xml
需要进行一些小修改:
package
应该是pom
,因为没有网络应用内容,Java类,配置等。build
中,不需要finalName
。postgresql
它的scope
,其值为提供,因此至少有一个依赖项由插件pluginManagement
应在父pom案例中使用的pom.xml
,而不是此处。这里只是隐藏了插件。在使用它的情况下,parent-pom定义了多个Maven项目的插件配置。所有使用相同父pom的项目都可以包含一个插件,其版本号和配置与父pom中相同。<强>加成强>
更正后的<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.group.groupid</groupId>
<artifactId>mSampleJDBCTempPrj</artifactId>
<packaging>pom</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>mSampleJDBCTempPrj Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>3.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>3.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.1-901-1.jdbc4</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.9</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<includeScope>provided</includeScope>
<outputDirectory>${project.build.directory}/providedDependencies</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
来自问题:
[DBA|ALL|USER]_CONSTRAINTS