仅包含带有 Spring Boot maven 插件的配置文件的源包和依赖项
Include source package and dependency only for a profile with Spring Boot maven plugin
在我的一个基于 Spring Boot
的项目中,我想从同一个项目创建两个不同的构建。
生成哪个构建的决定应来自 maven
配置文件。
我想创建一个包含特定文件夹 src/main/java/com/example/demo/full
和特定依赖项的构建(完整),以及不包含的第二个构建(default
或 light
)构建包括他们。
包含构建 full
的依赖项可以工作,但我不知道如何确保文件夹 src/main/java/com/example/demo/full
仅针对 full
构建编译。
这是我的 pom.xml
:
<?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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.3.RELEASE</version>
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<finalName>demo</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<useSystemClassLoader>false</useSystemClassLoader>
</configuration>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>full</id>
<dependencies>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.16</version>
</dependency>
</dependencies>
</profile>
</profiles>
</project>
我如何设法让提到的源文件夹只为配置文件 full
编译?
添加第二个 src 文件夹,例如 scr\foo
,然后在 maven 中添加一个配置文件,配置这个 src 文件夹。
<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/xsd/maven-4.0.0.xsd">
<build>
...
</build>
<profiles>
<profile>
<id>extraSource</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>src/foo/</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
此处使用 Build Helper Plugin plugin for maven. As it is embedded in the build section of the specific profile 添加源文件夹,它仅在使用此配置文件执行 maven 时处于活动状态(请参阅激活部分)
如果此依赖项是您不能提供 ID 的父项的一部分,则禁用您的 maven-source-plugin 之一会出现问题,我建议将阶段 none 与此代码一起用于其中之一您的 pom.xml 个文件将禁用此功能。
我也推荐使用命令:mvn -Prelease-profile help:effective-pom
如果您的代码中有两个依赖项 maven-source-plugin 则打印,如果是,请使用以下代码禁用其中一个:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<phase>none</phase>
</execution>
</executions>
</plugin>
在我的一个基于 Spring Boot
的项目中,我想从同一个项目创建两个不同的构建。
生成哪个构建的决定应来自 maven
配置文件。
我想创建一个包含特定文件夹 src/main/java/com/example/demo/full
和特定依赖项的构建(完整),以及不包含的第二个构建(default
或 light
)构建包括他们。
包含构建 full
的依赖项可以工作,但我不知道如何确保文件夹 src/main/java/com/example/demo/full
仅针对 full
构建编译。
这是我的 pom.xml
:
<?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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.3.RELEASE</version>
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<finalName>demo</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<useSystemClassLoader>false</useSystemClassLoader>
</configuration>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>full</id>
<dependencies>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.16</version>
</dependency>
</dependencies>
</profile>
</profiles>
</project>
我如何设法让提到的源文件夹只为配置文件 full
编译?
添加第二个 src 文件夹,例如 scr\foo
,然后在 maven 中添加一个配置文件,配置这个 src 文件夹。
<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/xsd/maven-4.0.0.xsd">
<build>
...
</build>
<profiles>
<profile>
<id>extraSource</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>src/foo/</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
此处使用 Build Helper Plugin plugin for maven. As it is embedded in the build section of the specific profile 添加源文件夹,它仅在使用此配置文件执行 maven 时处于活动状态(请参阅激活部分)
如果此依赖项是您不能提供 ID 的父项的一部分,则禁用您的 maven-source-plugin 之一会出现问题,我建议将阶段 none 与此代码一起用于其中之一您的 pom.xml 个文件将禁用此功能。
我也推荐使用命令:mvn -Prelease-profile help:effective-pom 如果您的代码中有两个依赖项 maven-source-plugin 则打印,如果是,请使用以下代码禁用其中一个:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<phase>none</phase>
</execution>
</executions>
</plugin>