如果有人可以帮助我,这将节省我很多时间.
我维护一个开源库,它被推送到一个sonatype存储库.我每天对该库进行几次更改,并使用mvn deploy将其推送到1.0_snapshot构建.我们称之为project1
我在另一个使用该库的项目中不断工作,我们称之为project2.
现在,每当我对项目1或2进行更改时,我需要首先构建项目1并将其部署到repo,然后构建项目2,以便下载project1.jar的新副本
Project2将Project1作为pom.xml中的依赖项:
<dependency>
<groupId>com.group</groupId>
<artifactId>project1</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
为了构建一个可以测试我所有更改的方法,我必须做这样的事情:
mvn -f ./project1/pom.xml clean deploy
mvn -U -f ./project2/pom.xml clean package
Run Code Online (Sandbox Code Playgroud)
这会将我的project1.jar上传到sonatype,然后project2下载新的快照并构建它.
这是我正在做的更大规模的简化图片,我的编译需要5分钟的上传和下载.
问题:使用maven的正确方法是什么,因此它知道在项目2的依赖项中使用project1的源代码?
我需要使用Jenkins在无法访问maven central的服务器上构建和发布项目,甚至无法访问Nexus.
鉴于我可以访问dev机器上的maven-central,以填充maven local_repository,我可以做到
mvn dependency:resolve-plugins dependency:go-offline
Run Code Online (Sandbox Code Playgroud)
然后复制linux服务器上的local_repository.
然后,获得的骑Non-resolvable parent POM错误,如描述在这里,我充满了特定的配置文件用于Windows(开发)和Linux(詹金斯)以虚假的中心轮廓覆盖由我父POM制成的Maven的中央参考:
<profiles>
<profile>
<id>windows</id>
<activation>
<os>
<family>Windows</family>
</os>
</activation>
<properties> <repository.base.url>file:///c:/maven_distribution_repo/</repository.base.url>
</properties>
</profile>
<profile>
<id>linux</id>
<activation>
<os>
<family>Linux</family>
</os>
</activation>
<properties>
<repository.base.url>file:///appli/Maven_3.1.1_build/maven_distribution_repo/</repository.base.url>
</properties>
<repositories>
<repository>
<id>central</id>
<name>Maven Plugin Repository</name>
<!--<url>http://repo1.maven.org/maven2</url>-->
<url>${repository.base.url}</url>
<releases>
<enabled>false</enabled>
</releases>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<name>Maven Plugin Repository</name>
<!--<url>http://repo1.maven.org/maven2</url>-->
<url>${repository.base.url}</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<updatePolicy>never</updatePolicy>
</releases>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
Run Code Online (Sandbox Code Playgroud)
这样,mvn -o compile仍然会引发Non-resolvable parent POM错误!但是使用此处--legacy-local-repository …
我如何强迫常春藤"脱机"工作; 也就是说,只使用缓存?
Eclipse的IvyDE插件有这个选项.如何从命令行/使用ant进行此操作?在常春藤文档中没有任何明显的(我可以找到)(或者至少在谷歌搜索中出现).
我假设我的本地缓存完全填充了我需要的所有依赖项.我在工作时将笔记本电脑插入网络,进行完整构建,填充我的缓存.然后我回家,即使我有网络连接,我知道常春藤无法到达我的常春藤存储库,因为它们是私人/内部工作.我不想等待连接到回购的所有超时.
我正在尝试在 docker 容器中构建/部署 Spring Boot。
FROM maven:3.5.3-jdk-8-slim AS build
COPY ./pom.xml /app/pom.xml
RUN cd /app
RUN mvn -f /app/pom.xml -s /usr/share/maven/ref/settings-docker.xml dependency:go-offline dependency:resolve-plugins -B
COPY . /app
RUN mvn -f /app/pom.xml -s /usr/share/maven/ref/settings-docker.xml --batch-mode package -DskipTests
Run Code Online (Sandbox Code Playgroud)
如您所见,我使用第一个 mvn 命令缓存所有依赖项,以便我的代码应用程序中的每个更改都不会触发新的大量依赖项下载。它适用于大多数依赖项,但仍然下载一些(即使缓存)。这是第二个 mvn 命令(包)的日志:
[INFO] Scanning for projects...
[INFO]
[INFO] ----------------------< xxx:xxx >----------------------
[INFO] Building xxxx 0.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- apt-maven-plugin:1.1.3:process (default) @ vsol-java ---
[INFO] Downloading from spring-releases: https://repo.spring.io/libs-release/org/apache/commons/commons-io/1.3.2/commons-io-1.3.2.pom
[INFO] Downloaded from spring-releases: https://repo.spring.io/libs-release/org/apache/commons/commons-io/1.3.2/commons-io-1.3.2.pom (0 B at 0 …Run Code Online (Sandbox Code Playgroud)