寻找Maven快捷方式——在Maven构建中包含一个jar文件



我继承了一个Maven项目。我只是把它作为一个构建工具,我想尽可能少地打扰东西。我必须对其中一个Java文件做一些添加,并且这个添加要求我在构建路径中包含一个新的jar。怎么说呢:这里有一个罐子,就用它吧。它不需要版本控制,不需要依赖,不需要下载,只需要使用。如有任何帮助,不胜感激。

EDIT:我发现了这个,它实际上是有效的(!)。如果知道这类事情的人可以读到这个答案,如果它看起来合理正确,请关闭这个问题作为dup。

EDIT:不,我误解了我的结果。它似乎工作

到目前为止,使用maven管理依赖项的最佳方法是从存储库中获取依赖项,但是您会想到从最理想到最不理想的四个选项:

  1. 如果jar是一个通用的第三方库,您几乎肯定会在某个存储库中找到它。你只需要添加一个<dependency>元素,也可能添加一个<repository>元素,这样它就知道从哪里获得依赖项。
  2. 在任何repo中都不可用的自制jar应该部署到本地存储库,比如Nexus,它对整个团队/公司都可用。然后像选项1一样将依赖项添加到项目中。这样,它只需要处理一次,其他人就可以通过正常的Maven机制获得jar。为了只在本地处理问题,而不提供工件的任何可重用性,您可以使用install:install-file目标将其安装到本地repo(即在~/.m2/repository中的本地缓存)。
  3. 最后,也是最不理想的,您可以使用系统范围的依赖项。这意味着您在文件系统的某个地方有可用的jar文件,将<dependency><scope>元素设置为值"system",并添加包含有关jar的完整路径的<systemPath>元素。

Edit:由于选项4似乎适合您,只需将jar放入项目并将其提交到版本控制。然后,假设jar位于项目中的lib/foo.jar,将其添加到POM的依赖项中:

<dependency>
    <groupId>some-group</groupId>
    <artifactId>some-artifact</artifactId>
    <version>1.2.3.4</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/foo.jar</systemPath>
</dependency>

以下是一些相关的答案:Maven:在项目版本控制中保留依赖的jar

我不建议从POM使用install:install-file——如果这是一次性需求,您最好从命令行使用它,并将其记录为准备步骤。然而,使构建自包含或提供包含所需构件的存储库无疑是更好的选择。

如何继续。创建一个独立的maven项目,灵感来自下面的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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
    <groupId>net.dwst</groupId>
    <artifactId>MavenMissingJars</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>
    <name>Maven Missing Jars</name>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-install-plugin</artifactId>
                <version>2.3</version>
                <executions>
                    <execution>
                        <id>dProguard-4.6</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>install-file</goal>
                        </goals>
                        <inherited>false</inherited>
                        <configuration>
                            <file>toinstall/4.6/proguard.jar</file>
                            <groupId>net.sf.proguard</groupId>
                            <artifactId>proguard</artifactId>
                            <version>4.6</version>
                            <packaging>jar</packaging>
                            <generatePom>true</generatePom>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

假设有一个/toinstall/4.6/目录相对于你的pom.xml,并且有一个名为proguard.jar的jar在那里,调用这个插件会将jar从你的本地目录复制到你的maven本地存储库。

这必须执行一次,这就是为什么最好有一个单独的小maven项目来注入缺失的jar。

然后,使用您在上面的pom.xml中定义的坐标(artifactid,版本和打包)在您的项目中添加依赖项。

最新更新