建立包含propriatery库的maven项目

Lon*_*don 41 java maven-2 maven

如何创建maven pom,这将使项目可构建,我可以直接将propriatery jar包括在我的项目中,而无需从存储库中获取它们吗?有没有人这样做过?

编辑:

我不希望通过使用依赖jar构建程序集使其可运行,我希望它是可构建的.因此,任何拥有此项目的人都能够构建它,即使在任何存储库中都找不到罐子.

Jig*_*shi 47

1您可以在应用程序
2的类路径中包含该jar,您可以在maven reopos中安装特定的jar文件

mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> \
    -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>
Run Code Online (Sandbox Code Playgroud)

  • 这种方法不适合开发人员团队 - 仅适用于单人乐队. (5认同)
  • 有一个类似的解决方案,取决于你有像Nexus这样的本地存储库管理器.它涉及使用`mvn deploy:deploy-file`将库推送到存储库,然后它可供所有开发人员使用. (2认同)

ant*_*ant 38

可能的解决方案是将你的依赖项放在你的pom中的src/main/resources中:

<dependency>
groupId ...
artifactId ...
version ...
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/yourJar.jar</systemPath>
</dependency>
Run Code Online (Sandbox Code Playgroud)

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

  • 此解决方案不起作用.以下是错误消息:groupId的`dependencies.dependency.systemPath':yourJar:jar不应该指向项目目录中的文件,$ {project.basedir} /src/main/resources/yourJar.jar将不能被依赖项目解析` (19认同)
  • +1解决方案对我有用,所以这不是一般问题. (3认同)
  • [`&lt;scope&gt;system`](https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#System_Dependencies) 现已弃用。 (2认同)

mos*_*tar 20

在项目下创建一个存储库文件夹.让我们来

${project.basedir}/src/main/resources/repo
Run Code Online (Sandbox Code Playgroud)

然后,将自定义jar安装到此repo:

mvn install:install-file -Dfile=[FILE_PATH] \
-DgroupId=[GROUP] -DartifactId=[ARTIFACT] -Dversion=[VERS] \ 
-Dpackaging=jar -DlocalRepositoryPath=[REPO_DIR]
Run Code Online (Sandbox Code Playgroud)

最后,将以下repo和依赖项定义添加到项目pom.xml中:

<repositories>
    <repository>
        <id>project-repo</id>
        <url>file://${project.basedir}/src/main/resources/repo</url>
    </repository>
</repositories>

<dependencies>    
    <dependency>
        <groupId>[GROUP]</groupId>
        <artifactId>[ARTIFACT]</artifactId>
        <version>[VERS]</version>
    </dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)

  • 我使用相同的技术,但使用`mvn deploy:deploy-file -DgroupId = [GROUP] -DartifactId = [ARTIFACT] -Dversion = [VERS] -Durl = file:src/main/resources/repo/-DrepositoryId = project- repo -DupdateReleaseInfo = true -Dfile = [FILE_PATH]`.你可以[见这里的答案](http://stackoverflow.com/a/36602391/535203) (2认同)

Lar*_*zer 7

为什么不运行像Nexus,你自己的maven repo,你可以上传第三方专有jar文件,还代理其他公共存储库,以节省带宽?

也有一些很好的理由来运行您自己的maven存储库管理器.

  • 当你有一个使用maven的团队时,像Nexus这样的回购经理是合理的.对于一个开发人员来说,对我毫无意义. (3认同)
  • Nexus设置起来非常简单,对我来说确实很有意义.我对自己的研究项目有自己的联系,因为我厌倦了总是手动安装罐子. (3认同)

Ali*_*ahi 7

您可以从本地驱动程序获取它,如下所示:

<dependency>
      <groupId>sample</groupId>  
       <artifactId>com.sample</artifactId>  
       <version>1.0</version> 
      <scope>system</scope>
      <systemPath>${project.basedir}/src/main/resources/yourJar.jar</systemPath>
</dependency>
Run Code Online (Sandbox Code Playgroud)

  • [`<scope> system`](https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#System_Dependencies)现已弃用. (3认同)

fl0*_*l0w 5

真正快速而肮脏的方式是指向本地文件:

<dependency>
      <groupId>sampleGroupId</groupId>  
       <artifactId>sampleArtifactId</artifactId>  
       <version>1.0</version> 
      <scope>system</scope>
      <systemPath>C:\DEV\myfunnylib\yourJar.jar</systemPath>
</dependency>
Run Code Online (Sandbox Code Playgroud)

然而,这只会存在于您的机器上(显然),为了共享它通常是有意义的使用正确的m2存档(nexus/artifactory)或者如果你没有任何这些或者不想设置一个本地maven结构化存档并在您的pom中配置"存储库":local:

<repositories>
    <repository>
        <id>my-local-repo</id>
        <url>file://C:/DEV//mymvnrepo</url>
    </repository>
</repositories>
Run Code Online (Sandbox Code Playgroud)

远程:

<repositories>
    <repository>
        <id>my-remote-repo</id>
        <url>http://192.168.0.1/whatever/mavenserver/youwant/repo</url>
    </repository>
</repositories>
Run Code Online (Sandbox Code Playgroud)

  • 就像我写的“快速而肮脏”,因此被弃用是有充分理由的。 (2认同)