当前位置: 首页 > 知识库问答 >
问题:

如何从“提供”作用域的maven artifactory存储库中获取特定的版本依赖JAR

沈良策
2023-03-14

构建之后,有可能从maven artifactory存储库中获得特定版本依赖JAR吗?由于有太多的Webapp,并且它们中的大多数都有公共依赖关系,所以考虑将所有依赖关系都作为“提供的”(这样WEB-INF/lib将为空),并在部署期间从artifactory存储库中获得所有特定版本的“提供的”JAR(部署的第一步是将JAR复制到Tomcat common lib中,然后是war部署)。如果可能的话,请在部署之前给出模型脚本来完成从存储库到Tomcat common lib的复制。

假设应用程序有3个webapp(webapp1、webapp2和webapp3),并且都使用abc1.jar、abc2.jar、abc3.jar。每个webapp classloader为每个war部署加载所有这3个。相反,我觉得将它们按照提供的方式制作,并将3个jar保存在Tomcat公共库中是合适的。现在我的问题是在maven构建之后,我是否可以从存储库中获得提供的jar,以便使用shell脚本将它们从存储库复制到Tomcat库中

http://Maven.apache.org/Maven-v4_0_0.xsd“>4.0.0 com.group.groupid mSampleJDBCTempPrj war 0.0.1-快照mSampleJDBCTempPrj Maven Webapp http://Maven.apache.org org.springframework spring-context 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个答案

明阳旭
2023-03-14

如果是这样的话,创建一个存档,其中包含JAR,这些JAR用pom.xml中提供的作用域进行标记。因此,如果多个Web应用程序使用这些相同的JAR,可以将它们部署到wen容器提供程序(Tomcat/Jetty/JBoss/etc)的中心位置。

就我所知,Maven中没有为这些提供的依赖项创建归档的选项。或者以其他方式轻松地从Maven存储库中提取它们。

一个问题出现了,你为什么要这样做?如今,许多项目转向Docker或类似的解决方案。它们只在一个容器中部署一个Web应用程序。因此,不需要搜索commin库并将它们放在web容器的前面的复杂性。等等。

似乎已经提供了从范围提供的maven web项目中获取JAR的答案

上面的示例展示了maven-dependency-plugin的用法。它被配置为在phase package( package )期间运行。
使用MVN clean package,让它完成它的任务。

pom.xml需要一些小的修改:

    null
<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>
 类似资料:
  • 有没有可能从maven artifactory存储库中获得特定版本的依赖项JAR,谁在构建之后已经“提供”了范围。由于如此多的webapps,并且它们中的大多数都具有公共依赖项,所以考虑将所有依赖项都设置为“提供”(这样web-inf/lib将为空),并且在部署期间从artifactory存储库中获得所有特定版本的“提供”JAR(部署的第一步是将JAR复制到Tomcat公共库,然后是war部署)。

  • 我想使用nd4j-cuda-10.2中的项目。它有两个操作系统(Linux和Windows)的jar文件。在使用windows系统时,如何将jar从Linux中排除,反之亦然?。 [Maven Repository][1][1]:https://repo1.maven.org/maven2/org/nd4j/nd4j-cuda-10.2/1.0.0-beta7/ 由于jar文件的重量。我想排除对每

  • 考虑到我有依赖项groupId和artifactId,我如何从pom中提取这个依赖项的版本。xml文件? 示例:如果我使用artifactId和groupId进行查询,我希望能够提取下面的依赖项版本。 我想将版本分配给一个全局环境变量,即DEP_version=1.6

  • 问题内容: 在给定pom.xml文件的情况下,我想扩展可传递依赖关系,并针对每个直接和可传递依赖关系,列出maven从中获取它的存储库。 随着我可以做 获取传递依赖关系树,但不包含存储库信息 获取使用的存储库列表,但不包括依赖项信息 来获取单个工件和可传递依赖项,但似乎获取了很多东西,我无法确定我真正关心的是哪一个。 问题答案: 我认为没有插件可以做到这一点。我认为这样做的原因是,没有人真正对这种

  • 我目前正在开发一个Java webapp,使用maven进行构建(我还没有mvn方面的经验)。对于我的场景,应用程序需要提供的作用域。现在,我将如何‘提取’pom文件中定义的JAR,以便将它们复制到Tomcat lib文件夹中?

  • 我在本地发布了一个依赖项。依赖项位于路径上 我认为这是Windows上的默认路径。 现在,在另一个项目中,我尝试使用这个库。我的<code>构建。gradle如下所示(以及其他依赖项) 我收到构建错误,某些类不存在等... 这不足以从本地存储库中识别依赖项吗? 我也为其他依赖项使用远程存储库,但工件名称版本是唯一的(com.mycompany:mylibrary:1.0)。我希望从本地存储库中找到