POM使用不同的Java版本,如何在POM中有一个额外的编译目标?

POM使用不同的Java版本,如何在POM中有一个额外的编译目标?,java,maven,Java,Maven,我有一个通过内联标记使用的。它打算被其他库使用,例如将示例代码插入到它们的JavaDoc中 图书馆已经建好了,哈利路亚,从昨天开始,现在开始了 我现在第一次将这个库实现到另一个项目中。该项目使用java.version1.5编译其代码。但是taglet库需要1.7。不仅用于运行javadoc.exe,还用于编译可选的“taglet customizer”类 更新:这些定制器类由每个开发人员创建——即在其库中使用taglet库的人员。在执行javadoc.exe之前,需要编译定制器类(这是完全可

我有一个通过内联标记使用的。它打算被其他库使用,例如将示例代码插入到它们的JavaDoc中

图书馆已经建好了,哈利路亚,从昨天开始,现在开始了

我现在第一次将这个库实现到另一个项目中。该项目使用
java.version
1.5编译其代码。但是taglet库需要1.7。不仅用于运行
javadoc.exe
,还用于编译可选的“taglet customizer”类


更新:这些定制器类由每个开发人员创建——即在其库中使用taglet库的人员。在执行
javadoc.exe
之前,需要编译定制器类(这是完全可选的——它们只用于,您可以不创建任何定制器类)


因此,它需要实现以下目标:

  • 编译主库类(需要Java 1.5)(
    mvn Compile
  • 编译定制程序(需要Java 1.7)(
    mvn CompileCollet
    ?)
  • 运行
    javadoc.exe
    (Java1.7)('MVNDocs'?)
  • 因此,
    mvn install
    将依次调用这三个目标

    我是Maven的新手,希望你能给我一些建议。这是我到目前为止发现的:

    以下是项目当前的编译目标:

    <properties>
        <java.version>1.5</java.version>
    </properties>
    
    <plugin>
       <artifactId>maven-compiler-plugin</artifactId>
       <version>2.3.2</version>
       <configuration>
          <encoding>UTF-8</encoding>
          <source>${java.version}</source>
          <target>${java.version}</target>
       </configuration>
    </plugin>
    
    
    1.5
    设置为
    1.5
    ,编译的taglet定制程序将这些标志设置为1.7

    一些参考资料:

    • maven编译器插件
    • 但是我相信唯一的JDK hi

    我如何设置这个额外的
    compileCollet
    目标,并设置整个项目,使其能够处理两个JDK版本?因此,
    mvn install
    (以及任何其他“主”目标)也按正确的顺序调用这个新的子目标

    正如我所说的,我对Maven是新手,虽然我开始了解一些细节,但我还不知道如何将这些结合起来


    谢谢你的帮助。

    我和其他对你的问题发表评论的人一样,对我来说,做你要做的事似乎有风险而且容易出错。最好将codelet扩展类放在一个单独的项目中,使用1.7的source&target构建它们,并在库POM的javadoc插件配置中添加对codelet扩展jar的依赖

    然而,如果这是不可能的,我会尝试这样的事情。这是未经测试,但应该给你的想法

    假设此目录结构:

    basedir
      src
        main
          java
             regularLibCodePackage
             codeletExtensionPackage
    
    <properties>
      <java.version>1.5</java.version>
      <!-- sets encoding for the whole Maven build -->
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    
    <plugin>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>2.3.2</version>  <!--consider using latest plugin version -->
      <configuration>
        <!-- applies to all executions unless overridden by an execution -->
        <source>${java.version}</source>
        <target>${java.version}</target>
      </configuration>
      <executions>
        <execution>
          <id>default-compile</id>
          <configuration>
            <excludes>
              <!-- Not sure exactly what the path should be here, the docs aren't 
                   clear. Maybe it should be an absolute path, e.g. 
                   ${project.basedir}/src/main/java/codeletExtensionPackage?
                   When you figure it out let me know and I'll edit the response. -->
              <exclude>codeletExtensionPackage</exclude>
            </excludes>
          </configuration>
        </execution>
        <execution>
          <id>codelet-compile</id>
          <phase>compile</phase>
          <goals>
            <goal>compile</goal>
          </goals>
          <configuration>
            <source>1.7</source>
            <target>1.7</target>
            <excludes>
              <!-- See note above about what to put here -->
              <exclude>regularLibCodePackage</exclude>
            </excludes>
          </configuration>
        </execution>
      </executions>
    </plugin>
    
    basedir
    src
    主要的
    JAVA
    regularLibCodePackage
    codeletExtensionPackage
    1.5
    UTF-8
    maven编译器插件
    2.3.2  
    ${java.version}
    ${java.version}
    默认编译
    codeletExtensionPackage
    小码编译
    编译
    编译
    1.7
    1.7
    regularLibCodePackage
    
    您是否需要将1.7类保留在最终jar之外?换句话说,运行Javadoc插件仅仅需要额外的类吗?如果答案是“是”,那么您还需要调整默认的jar插件执行。(如果答案是肯定的,这是将codelet类放在单独项目中的另一个原因!)

    
    maven jar插件
    2.5
    默认jar
    codeletExtensionPackage
    

    我在编译器和jar插件配置中使用了excludes,还有一个附带的includes块。我把它留给你去弄清楚工作配置,这应该让你开始。

    听起来你走错了方向,因为据我所知,这个标记应该在JavaDoc中使用,所以你必须通过。它是通过JavaDoc执行的,这是真的。但它是可选的,在运行JavaDoc/库的taglets之前,必须首先编译“customizer”类。本汇编要求1.7。但是库本身需要1.5.0版本,所以您应该创建tagletlib(jar文件),并将其用作mavanjavadoc插件的依赖项。除此之外,如果库需要1.5版本,它应该使用Java1.7运行。所以我看不出有什么问题,我不清楚。每个库的开发人员都希望在库中使用Codelet(taglet库),他们将创建这些定制器类。它们用于定制特定示例代码的输出(它们是可选的……只有当您想使用它们时才需要它们——仅供参考:您可以不用创建任何定制器就可以使用它们)。必须在执行
    javadoc.exe
    之前编译自定义程序类。Oracle不再支持1.5,为什么要这样做?告诉客户使用程序并升级。这样看来,我的问题是一个问题。我将发布一个新的问题,我认为这是问题的根源,而不是停留在这个多版本编译的假设解决方案上。正如我提到的,我对Maven是新手。我认为我设计项目的方式,在哪里以及如何创建这些定制器函数(实际上是函数,不一定是类),可能需要改变。为了回答您的问题,JavaDoc只需要定制器函数。谢谢你的洞察力。
    <plugin>
      <artifactId>maven-jar-plugin</artifactId>
      <version>2.5</version>  <!--consider using latest plugin version -->
      <executions>
        <execution>
          <id>default-jar</id>
          <configuration>
            <excludes>
              <exclude>codeletExtensionPackage</exclude>
            </excludes>
          </configuration>
        </execution>
      </executions>
    </plugin>