如何创建maven pom,这将使项目可构建,我可以直接包含我的项目的propriatery罐子,而不必从存储库中取出它们吗?有没有人这样做过?
编辑:
我不希望通过使用依赖jar构建程序集使其可运行,我希望它是可构建的。因此,任何拥有此项目的人都能够构建它,即使在任何存储库中都找不到罐子。
答案 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)
答案 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]