Maven 2 使用不同的artifactid在Maven中构建相同的项目(基于使用的JDK)

Maven 2 使用不同的artifactid在Maven中构建相同的项目(基于使用的JDK),maven-2,java,Maven 2,Java,我有一个场景,其中我的项目需要在不同的JDK中编译,并且根据使用的JDK,生成的工件名称应该不同。例如,如果项目名为MyProject,我调用mvn安装,那么它需要在JDK 1.4和JDK 1.5中编译,最后我得到同一项目的两个JAR(MyProjectJDK14-1.0和MyProjectJDK15-1.0)。有可能做到这一点吗?您可以定义两个,每个JDK使用一个。每个配置文件将被激活,与使用哪个JDK有关: <profiles> <profile>

我有一个场景,其中我的项目需要在不同的JDK中编译,并且根据使用的JDK,生成的工件名称应该不同。例如,如果项目名为MyProject,我调用mvn安装,那么它需要在JDK 1.4和JDK 1.5中编译,最后我得到同一项目的两个JAR(MyProjectJDK14-1.0和MyProjectJDK15-1.0)。有可能做到这一点吗?

您可以定义两个,每个JDK使用一个。每个配置文件将被激活,与使用哪个JDK有关:

<profiles>
    <profile>
        <id>profile-for-jdk1.4</id>
        <activation>
            <activeByDefault>false</activeByDefault>
            <jdk>1.4</jdk>
        </activation>
        <build>
            <finalName>myBuild-jdk1.4</finalName>
        </build>
    </profile>
    <profile>
        <id>profile-for-jdk1.5</id>
        <activation>
            <activeByDefault>false</activeByDefault>
            <jdk>1.5</jdk>
        </activation>
        <build>
            <finalName>myBuild-jdk1.5</finalName>
        </build>
    </profile>
</profiles>

profile-for-jdk1.4

要构建您的应用程序,尤其是该工具的应用程序,它允许您使用各种参数运行多个构建,在您的示例中,使用JDK。

使用Maven概要文件。将此部分添加到
pom.xml
项目
标记中:

<profiles>
  <profile>
    <activation>
      <jdk>1.4</jdk>
    </activation>
    <build>
       <finalName>${project.artifactId}-${project.version}-JDK1.4</finalName>
    </build>
  </profile>
  <profile>
    <activation>
      <jdk>1.5</jdk>
    </activation>
    <build>
       <finalName>${project.artifactId}-${project.version}-JDK1.5</finalName>
    </build>
  </profile>
</profiles>


了解更多有关配置文件的信息。

实现这一点的Maven方法不是更改工件的
最终名称,而是使用分类器。例如:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
          <classifier>${envClassifier}</classifier>
        </configuration>
      </plugin>
    </plugins>
  </build>
  ...
  <profiles>
    <profile>
      <id>jdk16</id>
      <activation>
        <jdk>1.6</jdk>
      </activation>
      <properties>
        <envClassifier>jdk16</envClassifier>
      </properties>
    </profile>
    <profile>
      <id>jdk15</id>
      <activation>
        <jdk>1.5</jdk>
      </activation>
      <properties>
        <envClassifier>jdk15</envClassifier>
      </properties>
    </profile>
  </profiles>
</project>

您必须调用Maven构建两次才能生成两个JAR(一个好的CI引擎可以做到这一点)。

实际上有一种方法可以用一个构建生成多个WAR(我想这也适用于JAR):您可以对不同的描述符多次执行汇编插件。

类似的问题是不同版本的JDK中使用的JDBC api的不同变体

我决定这些需要不同的人工林而不是分类器

您可以通过在设置中设置属性,然后在artifactId标记中引用该属性来实现这一点:

<project>
  <modelVersion>4.0.0</modelVersion>
  <artifactId>throwing-jdbc-${jdbc.version}</artifactId>
  <name>Throwing JDBC</name>
  <profiles>
    <profile>
      <id>jdbc3</id>
      <activation>
        <activeByDefault>false</activeByDefault>
        <jdk>[1.3,1.4,1.5]</jdk>
      </activation>
      <properties>
        <jdbc.version>3.0</jdbc.version>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <version>1.7</version>
            <configuration>
              <sources>
                <source>src/jdbc3-variants/java</source>
              </sources>
            </configuration>
            <executions>
              <execution>
                <goals>
                  <goal>add-source</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>jdbc4</id>
      <activation>
        <activeByDefault>false</activeByDefault>
        <jdk>1.6</jdk>
      </activation>
      <properties>
        <jdbc.version>4.0</jdbc.version>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
              <source>1.6</source>
              <target>1.6</target>
            </configuration>
          </plugin>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <configuration>
              <sources>
                <source>src/jdbc4/java</source>
                <source>src/jdbc4-variants/java</source>
              </sources>
            </configuration>
            <executions>
              <execution>
                <goals>
                  <goal>add-source</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>jdbc41</id>
      <activation>
        <activeByDefault>false</activeByDefault>
        <jdk>1.7</jdk>
      </activation>
      <properties>
        <jdbc.version>4.1</jdbc.version>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
              <source>1.7</source>
              <target>1.7</target>
            </configuration>
          </plugin>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <configuration>
              <sources>
                <source>src/jdbc4/java</source>
                <source>src/jdbc4.1/java</source>
                <source>src/jdbc4.1-variants/java</source>
              </sources>
            </configuration>
            <executions>
              <execution>
                <goals>
                  <goal>add-source</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <build>
    <sourceDirectory>src/main/java</sourceDirectory>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <version>2.2.1</version>
        <executions>
          <execution>
            <phase>verify</phase>
            <goals>
              <goal>jar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

4.0.0
抛出jdbc-${jdbc.version}
抛出JDBC
jdbc3
假的
[1.3,1.4,1.5]
3
org.codehaus.mojo
构建助手maven插件
1.7
src/jdbc3变体/java
添加源
jdbc4
假的
1.6
4
org.apache.maven.plugins
maven编译器插件
1.6
1.6
org.codehaus.mojo
构建助手maven插件
src/jdbc4/java
src/jdbc4变体/java
添加源
jdbc41
假的
1.7
4.1
org.apache.maven.plugins
maven编译器插件
1.7
1.7
org.codehaus.mojo
构建助手maven插件
src/jdbc4/java
src/jdbc4.1/java
src/jdbc4.1-variants/java
添加源
朱尼特
朱尼特
3.8.1
测试
src/main/java
org.apache.maven.plugins
maven源插件
2.2.1
验证
罐子

Hi romaintaz,感谢您的回复。如果我使用不同的JDK调用maven构建两次,我想这个解决方案会起作用,我只是在想是否有可能在一次go.ie调用maven安装中生成这两个JAR,然后得到两个JAR作为输出,一个使用JDK1.4编译,另一个使用JDK1.5。。。有什么想法吗???谢谢罗曼塔兹。。。我确实在我的设置中使用了哈德逊。。。我只是想找一个单独和Maven一起做的方法。不管怎样,哈得逊似乎是唯一的出路。嗨,阿宾4V,谢谢你的回复。如果我使用不同的JDK调用maven构建两次,我想这个解决方案会起作用,我只是在想是否有可能在一次go.ie调用maven安装中生成这两个JAR,然后得到两个JAR作为输出,一个使用JDK1.4编译,另一个使用JDK1.5。。。有什么想法吗???很抱歉,这在Maven 3中仍然有效吗?似乎对我不起作用。
<project>
  <modelVersion>4.0.0</modelVersion>
  <artifactId>throwing-jdbc-${jdbc.version}</artifactId>
  <name>Throwing JDBC</name>
  <profiles>
    <profile>
      <id>jdbc3</id>
      <activation>
        <activeByDefault>false</activeByDefault>
        <jdk>[1.3,1.4,1.5]</jdk>
      </activation>
      <properties>
        <jdbc.version>3.0</jdbc.version>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <version>1.7</version>
            <configuration>
              <sources>
                <source>src/jdbc3-variants/java</source>
              </sources>
            </configuration>
            <executions>
              <execution>
                <goals>
                  <goal>add-source</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>jdbc4</id>
      <activation>
        <activeByDefault>false</activeByDefault>
        <jdk>1.6</jdk>
      </activation>
      <properties>
        <jdbc.version>4.0</jdbc.version>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
              <source>1.6</source>
              <target>1.6</target>
            </configuration>
          </plugin>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <configuration>
              <sources>
                <source>src/jdbc4/java</source>
                <source>src/jdbc4-variants/java</source>
              </sources>
            </configuration>
            <executions>
              <execution>
                <goals>
                  <goal>add-source</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>jdbc41</id>
      <activation>
        <activeByDefault>false</activeByDefault>
        <jdk>1.7</jdk>
      </activation>
      <properties>
        <jdbc.version>4.1</jdbc.version>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
              <source>1.7</source>
              <target>1.7</target>
            </configuration>
          </plugin>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <configuration>
              <sources>
                <source>src/jdbc4/java</source>
                <source>src/jdbc4.1/java</source>
                <source>src/jdbc4.1-variants/java</source>
              </sources>
            </configuration>
            <executions>
              <execution>
                <goals>
                  <goal>add-source</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <build>
    <sourceDirectory>src/main/java</sourceDirectory>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <version>2.2.1</version>
        <executions>
          <execution>
            <phase>verify</phase>
            <goals>
              <goal>jar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>