仅包含具有Spring Boot maven插件的配置文件的源包和依赖项

时间:2017-05-24 12:21:38

标签: java maven spring-boot-maven-plugin

在我基于Spring Boot的项目中,我想从同一个项目中创建两个不同的构建。

生成哪个版本的决定应来自maven个人资料。

我想创建一个构建(完整),其中包含某个文件夹src/main/java/com/example/demo/full和某个依赖项,以及第二个构建(defaultlight)构建,但不包含它们

包含构建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编译提到的源文件夹?

2 个答案:

答案 0 :(得分:1)

添加第二个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>

此处使用maven的Build Helper Plugin插件添加源文件夹。由于它嵌入在specific profile的构建部分中,因此只有在使用此配置文件执行maven时才会激活(请参阅激活部分)

答案 1 :(得分:0)

如果此依赖项是您不能不提供 ID 的父级的一部分,则禁用您的 maven-source-plugin 之一会出现问题,我建议您将此代码的无阶段用于您的 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>