我试图构建一个Maven父项目脚本,其中包含一个第三方项目(及其所有依赖项)和我的另外几个项目。
我想复制所有的依赖项(我的意思是所有的依赖项,包括由其他依赖项请求的jars,而这些依赖项又是由我的一个子项目请求的)到父项目目录,例如lib,这样我就可以用通配符类路径运行java:
java -cp "lib/*" package.blah.blah.Main
我尝试了使用maven-依赖-插件的各种方法,如拷贝-依赖
,但我能指向Maven的只是我自己的子项目,而不是它们的依赖项(我的意思是在父项目pom中)。
这是我一直在写的父项目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/maven-v4_0_0.xsd">
<properties>
<server.version>7.0.2</server.version>
<ext.version>1.0-alpha3-SNAPSHOT</ext.version>
</properties>
<modelVersion>4.0.0</modelVersion>
<groupId>org.kontalk</groupId>
<artifactId>tigase-kontalk</artifactId>
<version>devel</version>
<packaging>pom</packaging>
<modules>
<module>../tigase-server/modules/master</module>
<module>../tigase-extension</module>
</modules>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-artifact</id>
<phase>package</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>org.kontalk</groupId>
<artifactId>tigase-server</artifactId>
<version>${server.version}</version>
<type>jar</type>
</artifactItem>
<artifactItem>
<groupId>org.kontalk</groupId>
<artifactId>tigase-extension</artifactId>
<version>${ext.version}</version>
<type>jar</type>
</artifactItem>
</artifactItems>
<outputDirectory>bin</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.kontalk</groupId>
<artifactId>tigase-server</artifactId>
<version>${server.version}</version>
</dependency>
<dependency>
<groupId>org.kontalk</groupId>
<artifactId>tigase-extension</artifactId>
<version>${ext.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
它只会复制bin目录中的两个直接子项目jar,而不会复制其他内容。我正在考虑做一个手动拷贝(就像Maven拷贝一样),从我的子项目的target/dependency
目录中残酷地拷贝所有JAR,但它似乎。。。残酷的
如果不能用现有的Maven软件完成,我甚至可以直接使用Maven exec(我希望它应该自动设置类路径,对吧?)
编辑:我想尽可能少地修改子项目,尤其是第三方项目。
我最终使用了复制依赖项
。这是pom的主要项目:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.8</version>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.basedir}/jars</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>install</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>jars</outputDirectory>
<resources>
<resource>
<directory>../tigase-extension/target/lib</directory>
<excludes>
<exclude>junit*</exclude>
</excludes>
</resource>
<resource>
<directory>../tigase-server/target/lib</directory>
<excludes>
<exclude>junit*</exclude>
</excludes>
</resource>
<resource>
<directory>../tigase-extension/target</directory>
<includes>
<include>tigase-extension-*.jar</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
在我添加到相同插件的子模块中,代码如下:
<execution>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
基本上,子模块将依赖项jar复制到target/lib中,然后主项目将这些jar复制到自己的jars文件夹中。
它有一些特定于项目的文件名和其他硬编码的东西,但如果我只想使用Maven提供的工具,我仍然认为这是最好的选择。也许一个新的Maven插件会是最佳选择,但我真的没有时间。
如果您想用maven构建一个简单可运行的jar文件,那么您可以使用以下配置:
<profiles>
<profile>
<id>dist</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<finalName>yourJarName</finalName>
<appendAssemblyId>false</appendAssemblyId>
<archive>
<manifest>
<mainClass>your.MainClass</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>dist</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
然后您可以使用mvn清洁包-pdist
构建它
编辑:然后可以使用java-jar target/yourJarName运行它。jar
我是maven的新手。(我已经搜索了几个小时的答案,但没有运气。mvn依赖:复制依赖不能解决我的问题)我需要复制项目的所有依赖项(以jar的形式),如果我的一个jar依赖于另一个工件,也复制该工件。 示例project1 pom。xml: “project1”依赖于project2。人工制品罐子当我使用“mvn依赖项:复制依赖项”时,我得到了project2。人工制品但我没有得到project3。
我可以在一个多模块gradle项目中复制一个模块的所有依赖项,比如 但实际上,我只需要通过应用项目组id的过滤器来复制项目依赖项 在Gradle中,使用Kotlin DSL的正确方法是什么?
我正在将Android Studio项目复制到Eclipse中,以便在Eclipse中测试它。我将java文件夹复制到Eclipse的src中,并根据Android Studio项目修改了res和Manifest文件。现在唯一的问题是jar文件。我不知道它在Android Studio项目中的位置,也不知道如何直接从Android Studio项目中使用Eclipse中的这些jar。
在实际使用之前,我试图从maven项目下载所有插件依赖项。 我试过跑步: 这成功地下载了它的插件及其部分依赖项。例如,对于exec插件,我得到: 但是,当您实际使用插件时,例如: 事实证明,它的依赖项尚未完全下载。 这是出乎意料的,因为根据文档,excludeTransitive属性在默认情况下为false(显式设置它没有帮助)。在我看来,它只是从定义的插件下载了一个级别的可传递依赖项。 有没有办
我与Intellij合作过一个java spring项目 当我构建并运行项目时,这些错误会出现在我身上: 无法解析符号“springframework” 错误:(32,48)java:-source 1.5中不支持菱形运算符(使用-source 7或更高版本启用菱形运算符) 错误:(33,55)java:方法引用在-source 1.5中不受支持(使用-source 8或更高版本来启用方法引用)
我的项目中有一些来自Maven中央存储库的依赖项。所以我想,如果从Maven Central和其他存储库(GitHub)中删除了任何依赖项,而我将无法在某个地方找到这个依赖项并构建我的项目,该怎么办? 我想把本地依赖缓存添加到我的项目的git存储库中,这样任何人都可以克隆这个存储库并离线构建我的项目。可能是Cocoapods的方式。我怎么能这么做?