如何从具有“提供”范围的maven artifactory存储库获取特定版本依赖关系jar

时间:2015-10-12 12:19:27

标签: maven maven-2 tomcat7 maven-3 tomcat8

是否有可能从构建后具有“提供”范围的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

示例pom.xml(没有提供范围)

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>

1 个答案:

答案 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需要进行一些小修改:

  • 这只是一个小的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