是否可以在不安装jar的情况下将jar添加到maven 2 build classpath?


700

在试验/快速而肮脏的开发阶段,Maven2让我发疯。

我有一个pom.xml文件,该文件定义了要使用的Web应用程序框架的依赖关系,并且可以从该文件快速生成入门项目。但是,有时我想链接到尚未pom.xml定义文件的第三方库,因此,不是pom.xml手动为第三方库创建文件并安装它,然后将依赖项添加到我的pom.xml,告诉Maven:“除了我定义的依赖项,还包括其中的所有jar/lib。”

看起来这应该很简单,但是如果是这样,我就缺少了一些东西。

任何有关如何执行此操作的指示都将受到赞赏。简而言之,如果有一种简单的方法将maven指向/lib目录并轻松创建一个pom.xml将所有封闭的jar映射到单个依赖项的方法,那么我就可以命名/安装并链接到一个依赖项,这也足够了。


如果您使用的是Netbeans,请按照以下步骤操作:[如何使用Netbeans嵌入式Maven将模块安装到Maven存储库中?] [1] [1]:stackoverflow.com/a/339874/530153
Rajat Gupta

1
我想指出,此链接stackoverflow.com/a/339874/530153似乎可以一次安装一个jar。
保罗

Answers:


600

流行方法的问题

在互联网上找到的大多数答案都建议您将依赖项安装到本地存储库中,或在 pom然后将依赖项与项目源一起分发。但是,这两种解决方案实际上都是有缺陷的。

为什么不应该应用“安装到本地存储库”方法

当您将依赖项安装到本地存储库时,它将保留在那里。只要您可以访问此存储库,您的分发工件就可以正常工作。问题是在大多数情况下,该存储库将驻留在您的本地计算机上,因此将无法解决对任何其他计算机的依赖性。显然,使您的工件依赖于特定的机器不是处理事情的方法。否则,必须将此依赖项本地安装在与该项目一起工作的每台计算机上,这并没有更好的效果。

为什么不应该应用“系统范围”方法

您使用“系统范围”方法依赖的jar既不会安装到任何存储库,也不会附加到目标软件包。这就是为什么您的分发软件包在使用时将无法解决该依赖性的原因。我认为这是什至不赞成使用系统范围的原因。无论如何,您都不想依赖不推荐使用的功能。

静态项目内存储库解决方案

将其放入您的后pom

<repository>
    <id>repo</id>
    <releases>
        <enabled>true</enabled>
        <checksumPolicy>ignore</checksumPolicy>
    </releases>
    <snapshots>
        <enabled>false</enabled>
    </snapshots>
    <url>file://${project.basedir}/repo</url>
</repository>

对于每个组ID形式为x.y.zMaven的工件,Maven在搜索工件时将在项目目录中包括以下位置:

repo/
| - x/
|   | - y/
|   |   | - z/
|   |   |   | - ${artifactId}/
|   |   |   |   | - ${version}/
|   |   |   |   |   | - ${artifactId}-${version}.jar

要对此进行详细说明,可以阅读此博客文章

使用Maven安装到项目仓库

我建议不要使用手动创建此结构,而是使用Maven插件将jar安装为工件。因此,要将工件安装到repo文件夹下的项目内存储库中,请执行:

mvn install:install-file -DlocalRepositoryPath=repo -DcreateChecksum=true -Dpackaging=jar -Dfile=[your-jar] -DgroupId=[...] -DartifactId=[...] -Dversion=[...]

如果您选择这种方法,则可以将存储库声明简化pom为:

<repository>
    <id>repo</id>
    <url>file://${project.basedir}/repo</url>
</repository>

辅助脚本

由于对每个库执行安装命令有点烦人并且绝对容易出错,因此我创建了一个实用程序脚本,该脚本会自动将lib文件夹中的所有jar都安装到项目存储库中,同时会自动从中解析所有元数据(groupId,artifactId等)。文件名。该脚本还会打印出依赖项xml,供您复制粘贴到pom

在目标包中包含依赖项

创建项目内存储库后,将解决分配项目及其源代码的依赖关系的问题,但是从那时起,项目的目标工件将依赖于未发布的jar,因此在安装时它到存储库中,它将具有无法解决的依赖关系。

为了解决这个问题,我建议在目标软件包中包括这些依赖项。您可以使用Assembly插件,也可以使用OneJar插件更好地做到这一点。OneJar上的官方文档很容易掌握。


3
我一直以为您可以在项目中创建一个存储库,最后确认它,太好了!
albfan

19
需要注意的两件事:1)我建议在Windows上也使用“ $ {project.baseUri} repo”而不是“ file:// $ {project.basedir} / repo”来获取符合RFC的URL。2)如果将项目构造为子模块,则此方法似乎会失败,因为$ {project.baseUri}已解析到模块的子目录。任何想法如何解决这个问题?
Oliver Hanappi 2013年

8
这几乎使我到了那里-但是Nikita的脚本试图对我拥有的名字错误的JAR文件太聪明。因此,我制作了一个简化的版本,该版本不对groupId进行任何猜测: github.com/carchrae/install-to-project-repo
Tom Carchrae 2013年

3
如此出色的答案!!做事有2种方法,正确的方法和可行的方法,先生,您的方法正确!
Panthro

1
在这里,您还可以找到有关如何从jar文件自动生成工件的信息:devcenter.heroku.com/articles/local-maven-dependencies
Dirk

485

仅适用于丢弃代码

设置scope == system并仅组成一个groupId,artifactId和版本

<dependency>
    <groupId>org.swinglabs</groupId>
    <artifactId>swingx</artifactId>
    <version>0.9.2</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/swingx-0.9.3.jar</systemPath>
</dependency>

注意:系统依赖项不会复制到生成的jar / war中
(请参阅如何在使用maven构建的war中包括系统依赖项


4
谢谢,这真的很接近我想要的。有什么办法将它们全部添加为一个条目?假设我有10个罐子的/ lib,是否可以以某种方式全部添加它们,例如systemPath的/some/path/*.jar?还是我仍然必须将每个人都视为已知依赖?不过,真的很接近我的需求,谢谢!

11
使用如下所示的systemPath:“ <systemPath> $ {basedir} /lib/BrowserLauncher2-1_3.jar </ systemPath>” $ {basedir}指向项目的根目录。
弗雷德里克·莫林

4
最好使用该项目。这样在您的路径中添加前缀:<systemPath> $ {project.basedir} /lib/AwesomeLib.jar </ systemPath>
Matthew McCullough,2009年

76
虽然我知道这是OP所要的,但我仍然想强调指出system强烈建议不要使用示波器。请参阅Dependency + Scopes
Pascal Thivent

6
@marioosh记住该问题的初衷是为了进行快速实验。如果要执行mvn软件包,请将jar安装到仓库中。
2011年

63

您可以在项目上创建本地存储库

例如,如果libs项目结构中有文件夹

  • libs文件夹中,您应该创建目录结构,例如:/groupId/artifactId/version/artifactId-version.jar

  • 在pom.xml中,您应该注册存储库

    <repository>
        <id>ProjectRepo</id>
        <name>ProjectRepo</name>
        <url>file://${project.basedir}/libs</url>
    </repository>
  • 并像往常一样添加依赖项

    <dependency>
        <groupId>groupId</groupId>
        <artifactId>artifactId</artifactId>
        <version>version</version>
    </dependency>

就这些。

有关详细信息:如何在Maven中添加外部库


1
您的回答几乎是正确的。groupId应该在服务器子目录中拆分。
彼得·福图因

5
当然,如果您具有复杂的groupId(如“ com.foo.bar”),则目录结构应为/com/foo/bar/artifactId/version/artifactId-verion.jar
Dmytro

这与一年前答案有很大不同吗?
约书亚·泰勒

在jar文件所在的最后一个目录中,您还需要添加相关的pom xml文件。
费德里科


15

这是我所做的,它也可以解决程序包问题,并且可以与签出的代码一起工作。

我使用的情况是在项目中创建了一个新文件夹repo,但是请随时使用src/repo

在我的POM中,我有一个不在任何公共Maven存储库中的依赖项

<dependency>
    <groupId>com.dovetail</groupId>
    <artifactId>zoslog4j</artifactId>
    <version>1.0.1</version>
    <scope>runtime</scope>
</dependency>

然后,我创建了以下目录 repo/com/dovetail/zoslog4j/1.0.1,并将JAR文件复制到该文件夹​​中。

我创建了以下POM文件来表示下载的文件(此步骤是可选的,但它删除了警告),并帮助下一个家伙弄清楚我从何处获得该文件。

<?xml version="1.0" encoding="UTF-8" ?>
<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>com.dovetail</groupId>
    <artifactId>zoslog4j</artifactId>
    <packaging>jar</packaging>
    <version>1.0.1</version>
    <name>z/OS Log4J Appenders</name>
    <url>http://dovetail.com/downloads/misc/index.html</url>
    <description>Apache Log4j Appender for z/OS Logstreams, files, etc.</description>
</project>

我创建的两个可选文件是POM的SHA1校验和和删除缺少的校验和警告的JAR。

shasum -b < repo/com/dovetail/zoslog4j/1.0.1/zoslog4j-1.0.1.jar \
          > repo/com/dovetail/zoslog4j/1.0.1/zoslog4j-1.0.1.jar.sha1

shasum -b < repo/com/dovetail/zoslog4j/1.0.1/zoslog4j-1.0.1.pom \
          > repo/com/dovetail/zoslog4j/1.0.1/zoslog4j-1.0.1.pom.sha1

最后,我将以下片段添加到pom.xml中,该片段允许我引用本地存储库

<repositories>
    <repository>
        <id>project</id>
        <url>file:///${basedir}/repo</url>
    </repository>
</repositories>

嗨,您将pom文件放在本地存储库中还是在jar文件旁边?
Peymankh

在上述解决方案中,它位于JAR文件旁边。请注意,我不喜欢上面的解决方案,因为它工作太多。
阿基米德·特拉哈诺

我仍然更喜欢我在这里发布的解决方案stackoverflow.com/questions/2229757/…–
阿基米德·特拉哈诺

我喜欢这种方法,尽管我使用maven install插件自动将jar安装到本地仓库中。
卡尔·G

13

您确实应该通过存储库建立一个框架,并预先确定您的依赖项。使用系统范围是人们经常使用的错误,因为他们“不在乎依赖关系管理”。问题是这样做会导致变态的Maven构建最终无法正常显示Maven。你会断下像一个更好的办法这个


12

这就是我们添加或安装本地jar的方式

    <dependency>
        <groupId>org.example</groupId>
        <artifactId>iamajar</artifactId>
        <version>1.0</version>
        <scope>system</scope>
        <systemPath>${project.basedir}/lib/iamajar.jar</systemPath>
    </dependency>

我给了一些默认的groupId和artifactId,因为它们是强制性的:)


11

Maven安装插件具有命令行用法,可以将jar安装到本地存储库中,POM是可选的,但您必须指定GroupId,ArtifactId,Version和Packaging(所有POM内容)。


实际上,他的想法是您不必为要导入到本地存储库中的库创建pom
Frederic Morin

5
-1,有时您只想添加一个jar文件而无需安装它。
Leonel

8

<scope>system</scope>出于其他原因解释,使用是一个糟糕的主意,将文件手动安装到本地存储库会使构建<url>file://${project.basedir}/repo</url>无法重现,并且使用也不是一个好主意,因为(1)可能不是格式正确的fileURL(例如,如果项目在包含不正常字符的目录中检出),(2)如果此项目的POM用作其他人项目的依赖项,则结果将不可用。

假设您不愿意将工件上传到公共存储库,Simeon建议使用帮助程序模块来完成这项工作。但是现在有一种更简单的方法…

建议

使用non-maven-jar-maven-plugin。确实满足您的要求,而没有其他方法的缺点。


虽然非maven-jar-maven-plugin似乎更易于使用,但也看到了maven-external-dependency-plugin
Jesse Glick 2013年

8

我找到了另一种方法,请参见Heroku文章

总结(很抱歉复制和粘贴)

  • repo在根文件夹下创建一个目录:
您的项目
+-pom.xml
+-src
+-回购
  • 运行此命令将jar安装到本地repo目录
mvn deploy:部署文件-Durl = file:/// path / to / yourproject / repo / -Dfile = mylib-1.0.jar -DgroupId = com.example -DartifactId = mylib -Dpackaging = jar -Dversion = 1.0
  • 将此添加到您的pom.xml
<repositories>
    <!--other repositories if any-->
    <repository>
        <id>project.local</id>
        <name>project</name>
        <url>file:${project.basedir}/repo</url>
    </repository>
</repositories>


<dependency>
    <groupId>com.example</groupId>
    <artifactId>mylib</artifactId>
    <version>1.0</version>  
</dependency>

6

在与CloudBees的家伙进行了很长时间的讨论之后,他们讨论了如何正确地包装此类JAR,然后提出了一个有趣的好建议:

创建一个伪造的Maven项目,该项目将先前存在的JAR附加为主要工件,并运行到所属的POM install:install-file执行中。这是这种POM的示例:

 <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-install-plugin</artifactId>
            <version>2.3.1</version>
            <executions>
                <execution>
                    <id>image-util-id</id>
                    <phase>install</phase>
                    <goals>
                        <goal>install-file</goal>
                    </goals>
                    <configuration>
                        <file>${basedir}/file-you-want-to-include.jar</file>
                        <groupId>${project.groupId}</groupId>
                        <artifactId>${project.artifactId}</artifactId>
                        <version>${project.version}</version>
                        <packaging>jar</packaging>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

但是为了实现它,应该改变现有的项目结构。首先,您应该记住,对于每种此类JAR,都应创建不同的假Maven项目(模块)。并且应该创建一个父Maven项目,其中包括所有子模块:所有JAR包装器和现有的主项目。结构可以是:

根项目(此文件包含父POM文件,其中包括带有模块 XML元素的所有子模块)(POM打包)

JAR 1包装Maven子项目(POM包装)

JAR 2包装Maven子项目(POM包装)

现有的主要Maven子项目(WAR,JAR,EAR ....包装)

当通过mvn:install或mvn:packaging运行父级时,将执行子模块。这可能是一个负号,因为项目结构应该更改,但是最后提供了一个非静态的解决方案


只是一个观察,但我认为您不需要为要添加的每个JAR创建一个新的POM。这应该足以建立一个单一的POM添加所有的JAR文件的提供你有一个执行块每个要添加的罐子。您只需要确保每个块都有唯一的ID。结果是一个单一的Maven模块,它将所有JAR添加到本地存储库中。(只需确保行家坐标不会与可能已经存在或以后添加的任何内容发生冲突!)
Stormcloud 2014年

英雄。这正是我想要的。不错的一个家伙。2013年一定是不错的一年;)
ndtreviv '16

5

对我来说,最简单的方法就是将您的maven-compiler-plugin配置为包含您的自定义jar。本示例将在lib目录中加载所有jar文件。

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <includes>
                    <include>lib/*.jar</include>
                </includes>
            </configuration>
        </plugin>

1
如果我添加这个行家says nothing to complile
拉维·帕雷克

这是all classes are up to date nothing to compile因为不再寻找*.java了。您可以使用添加回来<include>**/*.java</include>。然而,对于我的罐子而言,没有成功
迈克尔·拉法格

@Imiguelmh,这对于罐子不起作用的原因是什么?
kisna


3

我发现一个奇怪的解决方案:

使用Eclipse

  • 创建简单的(非Maven)java项目
  • 添加一个主类
  • 将所有罐子添加到类路径
  • 导出Runnable JAR(这很重要,因为这里没有其他方法可以做到)
  • 选择将所需的库提取到生成的JAR中
  • 决定许可问题
  • tadammm ...将生成的jar安装到m2repo
  • 将此单一依赖项添加到您的其他项目中。

干杯,Balint


3

如果您想要一个快速而肮脏的解决方案,则可以执行以下操作(尽管除了测试项目以外,我不建议这样做,但maven会抱怨这是不合适的)。

为您需要的每个jar文件添加一个依赖项,最好使用perl脚本或类似的东西,然后将其复制/粘贴到pom文件中。

#! /usr/bin/perl

foreach my $n (@ARGV) {

    $n=~s@.*/@@;

    print "<dependency>
    <groupId>local.dummy</groupId>
    <artifactId>$n</artifactId>
    <version>0.0.1</version>
    <scope>system</scope>
    <systemPath>\${project.basedir}/lib/$n</systemPath>
</dependency>
";

是的,这正是我想要的。一种用于研究测试代码的方法。没有什么花哨。是的,我知道那是他们所有人所说的:)出于我的目的,各种Maven插件解决方案似乎有些过分。我有一些罐子作为带有pom文件的第三方库提供给我。我希望它可以快速编译/运行。我平凡地适应了python的这个解决方案为我带来了奇迹。剪切并粘贴到我的pom中。
保罗

3

一个快速和肮脏的批量解决方案(基于Alex的答案):

libs.bat

@ECHO OFF
FOR %%I IN (*.jar) DO (
echo ^<dependency^>
echo ^<groupId^>local.dummy^</groupId^>
echo ^<artifactId^>%%I^</artifactId^>
echo ^<version^>0.0.1^</version^>
echo ^<scope^>system^</scope^>
echo ^<systemPath^>${project.basedir}/lib/%%I^</systemPath^>
echo ^</dependency^>
)

像这样执行:libs.bat > libs.txt。然后打开libs.txt并将其内容复制为依赖项。

就我而言,我只需要库来编译我的代码,而该解决方案是达到此目的的最佳解决方案。


2

即使它并不完全适合您的问题,我也将其放在这里。我的要求是:

  1. 在在线Maven存储库中找不到的jar应该在SVN中。
  2. 如果一个开发人员添加了另一个库,那么其他开发人员不应手动安装它们。
  3. IDE(在我的情况下为NetBeans)应该能够找到源代码和javadocs来提供自动补全和帮助。

让我们先讨论(3):在这里,仅将jar放在一个文件夹中,然后以某种方式将其合并到最终jar中,因为IDE无法理解这一点。这意味着必须正确安装所有库。但是,我不想让每个人都使用“ mvn install-file”安装它。

在我的项目中,我需要metawidget。开始了:

  1. 创建一个新的Maven项目(将其命名为“ shared-libs”或类似名称)。
  2. 下载metawidget并将zip解压缩到src / main / lib中。
  3. 文件夹doc / api包含javadocs。创建内容的zip文件(doc / api / api.zip)。
  4. 像这样修改pom
  5. 生成项目,然后将安装库。
  6. 将库添加为项目的依赖项,或者(如果在共享库项目中添加了此依赖项)将共享库添加为依赖项,以一次获取所有库。

每次拥有新库时,只需添加一个新执行,并告诉每个人再次构建项目(您可以使用项目层次结构来改进此过程)。


您可能需要检查Maven:通过相对路径将依赖项添加到jar中(IMHO是更好的选择)。
Pascal Thivent

最好确保本地存储库始终具有指向项目的相同相对路径。如果我在不同的位置有很多项目(或不同的分支),则将无法正常工作。
Cephalopod 2010年

我的回答有一种方法可以告诉pom.xml有关项目内部的jar的信息。为什么不这样做,然后将其指向$ {basedir} / lib中的jars?
Ed Brannin

1
@Ed因为这绝对不是系统范围的用途,所以系统范围的依赖项会有很多副作用。这是应该完全禁止的可怕做法。
Pascal Thivent 2010年

2

要安装不在maven存储库中的第3方jar,请使用maven-install-plugin。

以下是步骤:

  1. 从源(网站)手动下载jar文件
  2. 创建一个文件夹并将jar文件放入其中
  3. 运行以下命令以将第3方jar安装在本地Maven存储库中

mvn install:安装文件-Dfile = -DgroupId = -DartifactId = -Dversion = -Dpackaging =

下面是例如我用于simonsite log4j的示例

mvn install:安装文件-Dfile = / Users / athanka / git / MyProject / repo / log4j-rolling-appender.jar -DgroupId = uk.org.simonsite -DartifactId = log4j-rolling-appender -Dversion = 20150607-2059- Dpackaging = jar

  1. 在pom.xml中包括如下依赖项

      <dependency> 
            <groupId>uk.org.simonsite</groupId>
            <artifactId>log4j-rolling-appender</artifactId>
            <version>20150607-2059</version> 
      </dependency>
  2. 运行mvn clean install命令创建包装

以下是参考链接:

https://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html


这是边界链接的答案。您应该扩展答案以在此处包含尽可能多的信息,并且仅将链接用作参考。
再见StackExchange,

2

对于那些在这里找不到好的答案的人,这就是我们要获得一个包含所有必需依赖项的jar的方法。这个答案(https://stackoverflow.com/a/7623805/1084306)提到要使用Maven Assembly插件,但实际上并未给出示例。而且,如果您没有完全阅读答案的末尾(很长),您可能会错过它。将以下内容添加到您的pom.xml中将生成target/${PROJECT_NAME}-${VERSION}-jar-with-dependencies.jar

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.4.1</version>
            <configuration>
                <!-- get all project dependencies -->
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <!-- MainClass in mainfest make a executable jar -->
                <archive>
                  <manifest>
                    <mainClass>my.package.mainclass</mainClass>
                  </manifest>
                </archive>

            </configuration>
            <executions>
              <execution>
                <id>make-assembly</id>
                <!-- bind to the packaging phase -->
                <phase>package</phase> 
                <goals>
                    <goal>single</goal>
                </goals>
              </execution>
            </executions>
        </plugin>

1

我在@alex lehmann's的答案注释中提到了一些python代码,因此请将其发布在此处。

def AddJars(jarList):
  s1 = ''
  for elem in jarList:
   s1+= """
     <dependency>
        <groupId>local.dummy</groupId>
        <artifactId>%s</artifactId>
        <version>0.0.1</version>
        <scope>system</scope>
        <systemPath>${project.basedir}/manual_jars/%s</systemPath>
     </dependency>\n"""%(elem, elem)
  return s1

0

这没有回答如何将它们添加到您的POM中,并且可能没有什么用,但是只是将lib目录添加到您的类路径中就可以了吗?我知道当我需要一个不想添加到我的Maven仓库中的外部jar时,该怎么办。

希望这可以帮助。


1
这就是我正在做的事情,并且有效,但是它也污染了全局类的路径,而我正试图摆脱它。谢谢!

@purple确切地说,您是怎么做到的?
TheRealChx101 '19

0

在我们的项目中起作用的是Archimedes Trajano编写的内容,但是我们在.m2 / settings.xml文件中有如下内容:

 <mirror>
  <id>nexus</id>
  <mirrorOf>*</mirrorOf>
  <url>http://url_to_our_repository</url>
 </mirror>

并将*更改为Central。因此,如果他的答案对您不起作用,则应检查您的settings.xml


0

我只是想要一种快速而肮脏的解决方法...我无法从Nikita Volkov运行脚本:语法错误+它要求jar名称使用严格的格式。

我制作了这个Perl脚本,该脚本可以使用任何格式的jar文件名,并且可以在xml中生成依赖项,因此可以直接将其复制粘贴到pom中。

如果要使用它,请确保您了解脚本的作用,您可能需要更改lib文件夹和groupIdor 的值artifactId

#!/usr/bin/perl

use strict;
use warnings;

open(my $fh, '>', 'dependencies.xml') or die "Could not open file 'dependencies.xml' $!";
foreach my $file (glob("lib/*.jar")) {
    print "$file\n";
    my $groupId = "my.mess";
    my $artifactId = "";
    my $version = "0.1-SNAPSHOT";
    if ($file =~ /\/([^\/]*?)(-([0-9v\._]*))?\.jar$/) {
        $artifactId = $1;
        if (defined($3)) {
            $version = $3;
        }
        `mvn install:install-file -Dfile=$file -DgroupId=$groupId -DartifactId=$artifactId -Dversion=$version -Dpackaging=jar`;
        print $fh "<dependency>\n\t<groupId>$groupId</groupId>\n\t<artifactId>$artifactId</artifactId>\n\t<version>$version</version>\n</dependency>\n";
        print " => $groupId:$artifactId:$version\n";
    } else {
        print "##### BEUH...\n";
    }
}
close $fh;

0

Java中scope ='system'方法的解决方案:

public static void main(String[] args) {
        String filepath = "/Users/Downloads/lib/";
        try (Stream<Path> walk = Files.walk(Paths.get(filepath))) {

        List<String> result = walk.filter(Files::isRegularFile)
                .map(x -> x.toString()).collect(Collectors.toList());

                String indentation = "    ";
                for (String s : result) {
                    System.out.println(indentation + indentation + "<dependency>");
                    System.out.println(indentation + indentation + indentation + "<groupId>"
                            + s.replace(filepath, "").replace(".jar", "")
                            + "</groupId>");
                    System.out.println(indentation + indentation + indentation + "<artifactId>"
                            + s.replace(filepath, "").replace(".jar", "")
                            + "</artifactId>");
                    System.out.println(indentation + indentation + indentation + "<version>"
                            + s.replace(filepath, "").replace(".jar", "")
                            + "</version>");
                    System.out.println(indentation + indentation + indentation + "<scope>system</scope>");
                    System.out.println(indentation + indentation + indentation + "<systemPath>" + s + "</systemPath>");
                    System.out.println(indentation + indentation + "</dependency>");
                }

    } catch (IOException e) {
        e.printStackTrace();
    }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.