2017-02-16 41 views
1

我想构建一个应用程序的两个版本,唯一的区别是我想在一个特定的.java文件的不同版本中交换。我已经有了一个用于构建源代码的Maven构建版本,另外还有一个Ant构建版本,然后将其封装为带有嵌入式JRE的zip使用Maven,我如何使用一个不同的.java文件构建两个版本的Java项目?

因此,我可以修改我的Ant构建以为这个新构建创建另一个zip文件,但是如何处理使用单个修改后的源文件重建源的最佳方法是什么?

更新,进步

我现在已经子类与main()方法的起始课,所以不再需要交换源文件,围绕相反,我们只需要在清单中传为mainClass的差值,我们现在只有一个源树可以构建。

所以在我pom.xml我:

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <version>2.3</version> 
     <configuration> 
      <descriptorRefs> 
       <descriptorRef>jar-with-dependencies</descriptorRef> 
      </descriptorRefs> 
      <descriptors> 
       <descriptor>assembly.xml</descriptor> 
      </descriptors> 
      <archive> 
       <manifest> 
            <mainClass>com.companyname.StartClass</mainClass> 
        <packageName>com.companyname</packageName> 
        <addClasspath>true</addClasspath> 
       </manifest> 
      </archive> 
     </configuration> 
     <executions> 
      <execution> 
       <id>make-assembly</id> 
       <phase>package</phase> 
       <goals> 
        <goal>single</goal> 
       </goals> 
      </execution> 
     </executions> 
    </plugin> 

所以我可以有这些组件插件多,所以我可以建两个组件只是在不同的表现?

+0

如何在构建之间更改此源文件?通过访问资源配置文件可以实现不同的运行时行为吗?顺便说一句,你不必使用单独的Ant构建。可以在项目的POM中配置[Maven Assembly Plugin](https://maven.apache.org/plugins/maven-assembly-plugin/)来完成此操作。 –

+0

@GeroldBrosser'你如何在构建之间更改此源文件? '这是问题的关键,对我来说,比使用配置文件实现差异更好的解决方案。 –

+0

其实我是指你如何交替地改变源文件的内容。你每次都从两个不同的地方覆盖它吗?你是否手动更改它? –

回答

0

基本上这是针对一些Maven的核心概念:

  • 一个项目有一个<build>/<sourceDirectory>导致一个假象。
  • 具有相同名称的工件(默认情况下从<artifactId><version>派生的<finalName>)应该具有相同的内容。

有几个解决方案:

  • 从在一个if评估,以实现不同的运行时行为的属性文件中的property。你不喜欢那样。
  • A property通过在if中评估的命令行定义。
  • A text from a resource file这是在if评估。你不喜欢那样。
  • A command line argument这是在if评估。
  • A Java assertion,但引用从那里:“不要使用断言来做任何您的应用程序需要正确操作的工作。”“。

一个Maven的方法是:

 

<profiles> 

    <profile> 
     <id>B</id> 
     <activation> 
     ... 
     </activation> 
     <dependencies> 
     <dependency> 
      <groupId>com.example</groupId> 
      <artifactId>B</artifactId> 
      <version>...</version>    
     </dependency> 
     </dependencies> 
     <build> 
     <finalName>AwithB</finalName> 
     </build> 
    </profile> 

    <profile> 
     <id>C</id> 
     <activation> 
     ... 
     </activation> 
     <dependencies> 
     <dependency> 
      <groupId>com.example</groupId> 
      <artifactId>C</artifactId> 
      <version>...</version>    
     </dependency> 
     </dependencies> 
     <build> 
     <finalName>AwithC</finalName> 
     </build> 
    </profile> 

    </profiles> 

回想当初的第二个概念:相同的名字,相同的内容(和行为)。您可以使用配置文件中的<finalName>声明来相应地修改A的名称。

+0

谢谢我已经更新了我的问题,不确定它如何适合您的答案。 –

+1

你的答案没有解决我的问题,但听起来像是基本上是正确的,所以我标记为这样。 –

相关问题