Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 构建包含适当库的maven项目_Java_Maven 2_Maven - Fatal编程技术网

Java 构建包含适当库的maven项目

Java 构建包含适当库的maven项目,java,maven-2,maven,Java,Maven 2,Maven,如何创建maven pom,这将使项目可构建,我可以直接在项目中包含适当的JAR,而不必从存储库中获取它们吗?以前有人这样做过吗 编辑: 我不想通过使用依赖项jar构建程序集使其可运行,我希望它是可构建的。因此,拥有此项目的任何人都可以构建它,即使在任何存储库中都找不到jar。您可以使用并创建包含所有依赖项的jar。1或者您可以将该jar包含在应用程序的类路径中 2您可以通过 mvn install:install-file -Dfile=<path-to-file> -Dgroup

如何创建maven pom,这将使项目可构建,我可以直接在项目中包含适当的JAR,而不必从存储库中获取它们吗?以前有人这样做过吗

编辑:


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

您可以使用并创建包含所有依赖项的jar。

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

mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> \
    -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>
mvn安装:安装文件-Dfile=-DgroupId=\
-DartifactId=-Dversion=-Dpackaging=

您可以将jar添加到您的项目中,然后使用maven assembly插件,或者将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
mvn安装:安装文件-Dfile=-DgroupId=-DartifactId=-Dversion=-dpackage=-DgeneratePom=true
其中:要加载的文件的路径
文件应在其下注册的组
文件的工件名称
文件的版本
文件的打包,例如jar

为什么不运行类似于您自己的maven repo的东西,您可以上传第三方专有jar文件,还可以代理其他公共存储库,以保存在bandwith上


运行自己的maven repository manager也有一些很好的理由。

实现这一点的一个好方法是使用maven镜像服务器,如。它是免费的并且非常容易安装(Java web app)。使用Nexus,您可以拥有私有(团队、公司等)存储库,能够在其中部署第三方和内部应用程序,同时还可以将其他Maven存储库注册为同一服务器的一部分。这样,本地Maven设置将只引用一台专用Nexus服务器,所有依赖项都将使用它解决。

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

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

groupId。。。
人工智能。。。
版本
系统
${project.basedir}/src/main/resources/yourJar.jar
注意:系统依赖项不会复制到结果jar/war中

(请参阅)

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

您可以从您当地的司机那里获得它,如下所示:


样品
com.sample
1
系统
${project.basedir}/src/main/resources/yourJar.jar

在项目下创建存储库文件夹。让我们坐飞机吧

${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和依赖项定义添加到projects 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>

回购计划
文件://${project.basedir}/src/main/resources/repo
[小组]
[人工制品]
[VERS]

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

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

样本群ID
样本人工活动
1
系统
C:\DEV\myfunnylib\yourJar.jar
但是,这只会存在于您的计算机上(显然),因为使用适当的m2归档(nexus/artifactory)共享通常是有意义的,或者如果您没有这些归档,或者不想设置本地maven结构化归档并在pom中配置“存储库”:

本地:

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

我的本地回购协议
文件://C:/DEV//mymvnrepo
远程:

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

我的远程回购
http://192.168.0.1/whatever/mavenserver/youwant/repo

在maven项目的根目录下创建一个新文件夹,比如说
本地maven repo

只需在您的
pom.xml的
中添加一个本地repo:


本地马文回购
文件://${project.basedir}/localmaven repo
然后,对于要安装的每个外部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]

(复制自)

这不是我要问的,我不希望它是可运行的,我希望它是可构建和可运行的。如果我向您发送我的项目,您将无法构建它,因为您没有我的专有库,而项目使用它。但是,如果我向您发送了assembly jar,您就可以运行它了。life.java我如何才能做到这一点(#1听起来很有趣)?我可以把我的专用罐子放在src/main/resources中吗?我怎么能在我的pom中引用它呢?@伦敦对于一个你来说,场景中没有pom,您只需将jar放在项目的类路径中,您可以编写一个ant任务,将jar复制到
WEB-INF/lib
。这种方法不适用于一个开发团队——只适用于一个人组。@01es Approch一个适合于团队,而对于2个团队,每个人必须执行一次+1,但我觉得对于一个jar来说,它与您的方式有太多的关系有一个类似的解决方案,它取决于您是否有一个本地存储库管理器,比如Nexus。它涉及到使用
mvn deploy:deploy file
将库推送到存储库,然后所有开发人员都可以使用它。这并不是我想要的答案,想象一下:你下载了我的项目,就可以构建它,没有任何来自你方的交互,appart mvn clean installcommand@London谢谢你的澄清。我想我现在明白了。好的,文件夹src/main/resources将在项目类路径上结束,但其中的JAR不会在路径上枚举。我隐约记得用“内部JAR”配置了一个项目,但还没有找到它。当你有一个使用maven的团队时,像Nexus这样的回购经理是合理的。对于一个开发者来说,这对我来说毫无意义