构建包含专有库的maven项目

时间:2010-12-20 15:43:34

标签: java maven-2 maven

如何创建maven pom,这将使项目可构建,我可以直接包含我的项目的propriatery罐子,而不必从存储库中取出它们吗?有没有人这样做过?

编辑:

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

11 个答案:

答案 0 :(得分:47)

1 您可以在应用程序的类路径中包含该jar 2 您可以通过

在maven reopos中安装特定的jar文件
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> \
    -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>

答案 1 :(得分:34)

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

<dependency>
groupId ...
artifactId ...
version ...
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/yourJar.jar</systemPath>
</dependency>

注意:系统依赖关系不会复制到生成的jar / war中 (见How to include system dependencies in war built using maven

答案 2 :(得分:18)

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

${project.basedir}/src/main/resources/repo

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

mvn install:install-file -Dfile=[FILE_PATH] \
-DgroupId=[GROUP] -DartifactId=[ARTIFACT] -Dversion=[VERS] \ 
-Dpackaging=jar -DlocalRepositoryPath=[REPO_DIR]

最后,将以下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>

答案 3 :(得分:7)

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

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

答案 4 :(得分: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>

答案 5 :(得分:5)

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

<dependency>
      <groupId>sample</groupId>  
       <artifactId>com.sample</artifactId>  
       <version>1.0</version> 
      <scope>system</scope>
      <systemPath>C:\DEV\myfunnylib\yourJar.jar</systemPath>
</dependency>

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

<repositories>
    <repository>
        <id>my-local-repo</id>
        <url>file://C:/DEV//mymvnrepo</url>
    </repository>
</repositories>

远程:

<repositories>
    <repository>
        <id>my-remote-repo</id>
        <url>http://192.168.0.1/whatever/mavenserver/youwant/repo</url>
    </repository>
</repositories>

答案 6 :(得分:3)

实现这一目标的一个好方法是拥有一个Maven镜像服务器,例如Sonatype Nexus。它是免费的,非常容易设置(Java Web应用程序)。使用Nexus,可以拥有私有(团队,企业等)存储库,可以将第三方和内部应用程序部署到其中,同时还可以将其他Maven存储库注册为同一服务器的一部分。这样,本地Maven设置将仅引用一个专用Nexus服务器,并且将使用它来解析所有依赖项。

答案 7 :(得分:1)

您可以使用maven-assembly-plugin并创建一个包含所有依赖项的jar。

答案 8 :(得分:1)

您可以将jar添加到项目中并使用maven-assembly-plugin,或将jar添加到本地存储库:

mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging> -DgeneratePom=true

Where: <path-to-file>  the path to the file to load
       <group-id>      the group that the file should be registered under
       <artifact-id>   the artifact name for the file
       <version>       the version of the file
       <packaging>     the packaging of the file e.g. jar

答案 9 :(得分:1)

我认为这里的“正确”解决方案是将您的专有库添加到您自己的存储库中。它应该很简单:为库项目创建pom并在存储库中发布已编译的版本。将此存储库添加到邮件项目的存储库列表中并运行构建。我相信它会对你有用。

答案 10 :(得分:1)

创建一个新文件夹,假设您的Maven项目的根目录为local-maven-repo

只需在<project>

pom.xml之后添加一个本地回购
<repositories>
    <repository>
        <id>local-maven-repo</id>
        <url>file:///${project.basedir}/local-maven-repo</url>
    </repository>
</repositories>

然后,对于要安装的每个外部jar,请转到项目的根目录并执行:

mvn deploy:deploy-file -DgroupId=[GROUP] -DartifactId=[ARTIFACT] -Dversion=[VERS] -Durl=file:./local-maven-repo/ -DrepositoryId=local-maven-repo -DupdateReleaseInfo=true -Dfile=[FILE_PATH]

(从my reply on a similar question复制)