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

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

司马辉
2023-03-14

有没有可能从maven artifactory存储库中获得特定版本的依赖项JAR,谁在构建之后已经“提供”了范围。由于如此多的html" target="_blank">webapps,并且它们中的大多数都具有公共依赖项,所以考虑将所有依赖项都设置为“提供”(这样web-inf/lib将为空),并且在部署期间从artifactory存储库中获得所有特定版本的“提供”JAR(部署的第一步是将JAR复制到Tomcat公共库,然后是war部署)。如果可能的话,请在部署之前提供模型脚本来完成从存储库到Tomcat公共库的复制。

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

http://Maven.apache.org/Maven-v4_0_0.xsd“>4.0.0com.group.groupid mSampleJDBCTempPrj war 0.0.1-snapshot 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的用法。它被配置为在阶段包( package )期间运行。
使用mvn clean package,让它完成它的任务。

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

  • 这只是一个小的pom.xml,因此应该是pom,因为没有Web应用程序内容、Java类、配置等。
  • 生成中,不需要finalname
  • 更新了dependencypostgreSQL它的作用域提供了值,因此插件至少解析了一个dependency
  • 删除了pluginmanagement,它应该在父级POM情况下使用,而不是在这里使用。在这里它只是隐藏了插件。在使用它的情况下,parent-pom为多个Maven项目定义插件配置。所有使用相同parent-pom的项目都可以包含一个插件,具有相同的版本号和配置,如parent-pom中给出的。

添加

更正的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/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吗?由于有太多的Webapp,并且它们中的大多数都有公共依赖关系,所以考虑将所有依赖关系都作为“提供的”(这样WEB-INF/lib将为空),并在部署期间从artifactory存储库中获得所有特定版本的“提供的”JAR(部署的第一步是将JAR复制到Tomcat common lib中,然后是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文件的重量。我想排除对每

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

  • cytoscape.org/nexus/的链接是:http://code.cytoscape.org/nexus/content/repositories/releases/org/cytoscape/vizmap-api/3.6.0/

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

  • 我用我的真实情况来说明问题。 我使用logback 1.0.1进行日志记录,它包含SLF4J 1.6.4作为依赖项。我还为遗留日志API(Java . util . logging、log4j和commons-logging)使用SLF4J API桥,它们不是显式的依赖关系。这些也必须(最好)是版本1.6.4。 为了使我的pom.xml尽可能整洁和无错误,我想强制这些API桥接器与SLF4J版本相