当前位置: 首页 > 知识库问答 >
问题:

在项目pom中设置父pom中定义的活动配置文件

奚和光
2023-03-14

我们有一个公司范围的Super Pom,用于定义我们使用的许多默认值。例如,Super Pom定义要使用的JDK版本以及其他参数。这由我们的项目继承为父pom。

我们的大多数项目都使用JDK1.7,但有一组项目仍在JDK1.6版本上。我在我的父母pom中添加了以下配置文件定义:

<properties>
    <travelclick.snapshot.repo>artifactory/libs-snapshot-local</travelclick.snapshot.repo>
    <old.javac.source>1.5</old.javac.source>
    <old.javac.target>1.6</old.javac.target>
</properties>
<profiles>
    ...
    <profile>
        <id>jdk1.6</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>com.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.3</version>
                    <configuration>
                        <...>
                        <source>${old.javac.source}</source>
                        <target>${old.javac.target}</target>
                        <...>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>
    <...>
</profiles>

现在,我有一个名为jdk1.6的配置文件,我想在项目的pom中指定它应该默认使用这个。我该怎么做?

我尝试在项目的pom中添加:

<profiles>
    <profile>
        <id>jdk1.6</id>
        <activations>
            <activeByDefault>true</activeByDefault>
        </activations>
    </profile>
</profile>

但这重新定义了我的jdk1。6个人资料。

我试着把这个放进去:

<activeProfiles>
   <activeProfile>jdk1.6</activeProfile>
</activeProfiles>

但这只适用于settings.xml

如何在父pom中指定配置文件,然后说这是子pom中的活动配置文件?

我尝试过使用属性。在我的父pom.xml:

<profiles>
    <profile>
        <id>jdk1.6</id>
        <activation>
            <property>
                <name>use-jdk1.6</name>
            </property>
       </activation>
   <profile>
</profiles>

在我当地的pom中有以下内容:

<properties>
     <use-jdk1.6>true</use-jdk1.6>
</properties>

但是,这并不能反映个人资料。这确实有效:

$ mvn -Puse-jdk1.6 clean package site

所以,我知道父配置文件确实有效。

你能添加你的个人资料详细信息吗?执行目标帮助:所有个人资料

[INFO] Listing Profiles for Project: xxxx
  Profile Id: artifactory (Active: true , Source: settings.xml)
  Profile Id: jdk1.6 (Active: false , Source: pom)
  Profile Id: arse-version (Active: false , Source: pom)
  Profile Id: urge (Active: false , Source: pom)

我可以激活jdk1。6从命令行。我只想在我的孩子poms中将其作为默认值激活。

共有1个答案

方增
2023-03-14

我在尖叫。

我发现了问题以及为什么这不起作用。

在我的父母pom中,我有以下内容:

<properties>
    <javac.source>1.7</javac.source>
    <javac.source>1.7</javac.source>
    <old.javac.source>1.7</old.javac.source>
    <old.javac.source>1.7</old.javac.source>
    ...
</properties>
<profiles>
    <profile>
        <id>jdk1.6</id>
        <activation>
            <property>
               <name>use-jdk1.6</name>
            </property>
        </activation>
        <build>
        <plugins>
           ....
           <plugin>
                 <groupId>maven-compiler-plugin</groupId>
                 ...
                 <configuration>
                     <!-- This isn't doing what I think -->
                     <source>${old.javac.source}</source>
                     <target>${old.javac.target}</source>
                     ...
                 </configuration>
           </plugin>
      </plugins>
<profile>

在我的孩子pom中,我有这样的:

 <properties>
     <use-jdk1.6>true</use-jdk1.6>
</properties>

而且,设置似乎需要使用-jdk1。6property就是不起作用。然而,事实并非如此。我正在设置个人资料。

如果我有系统属性javac。sourcejavac。目标set,它会覆盖maven编译器pluing的配置(尽管我已经明确设置了

所以,我在这个问题上花了六个小时才意识到这是因为我设置了一个名为javac的属性。源代码而不是类似于java版本

 类似资料:
  • 当前情景: 父pom有一个distributionManagement部分,其中定义了两个存储库(发布和快照);请参阅以下内容: 父pom: 基于同一pom中指定的“版本”,maven会自动识别是在发布中部署工件还是在nexus中部署快照存储库。(我相信这是使用版本是否有任何“-SNAPSHOT”后缀来完成的。) 有一个子pom定义了一些部署文件目标;请参阅以下内容: 儿童pom: 问题: 正如您

  • 我们的企业团队维护设置。xml文件,该文件定义了开发项目可以与Maven一起使用的各种概要文件,以构建其构件并将其安装到存储库中。我们期望Jenkins中的每个项目都会使用指定的所需概要文件定义一个-P参数。 这是我的问题:我需要使用的配置文件指定了一个通常对我的项目不可见的存储库(分阶段发布存储库),因此如果该配置文件处于活动状态,则无法依赖该存储库中的任何内容。我需要一种方法来激活我项目的文件

  • Maven插件及其在父pom中定义的依赖项,我不希望我的子pom包含该插件依赖项。 例如,如果有1个父级和100个子级,99个使用该插件并希望在一个子级中排除该插件。 我们如何才能实现这一目标?

  • 问题内容: 我使用的父POM定义了我不想在子POM中运行的插件。如何完全禁用子pom中的插件? 约束:我不能更改父POM本身。 问题答案: 在禁用子POM中的Findbugs时,以下对我有用: 注意:Findbugs插件的完整定义在我们的父/超级POM中,因此它将继承该版本等。 在Maven 3中,您需要使用: 用于插件。

  • 应用程序-dev.properties application.prod.properties 然后,我有一个pom,它将spring-boot pom作为父pom 然后我按以下方式设置配置文件:

  • 我有一组项目,它们都需要在构建期间运行相同系列的Maven插件执行。我想避免在每个项目中重新声明所有这些配置,所以我让它们都从一个只包含那些插件执行(8个不同的mojo)的父pom“模板”项目继承。但我希望在Maven构建期间,这些插件执行只在子项目上运行,而不在父项目上运行。 > 在父POM的元素中声明插件执行,并使用properties-maven-plugin打开父项目中其他插件的属性。这没