我想构建一个应用程序的两个版本,唯一的区别是我想交换一个特定.java
文件的不同版本。我已经有了一个用于构建源代码的Maven构建版本,加上一个Ant构建版本,然后将其打包为带有嵌入式JRE的zip
。
所以我可以修改我的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 :(得分:0)
基本上这是针对Maven的一些核心概念:
<build>/<sourceDirectory>
导致一个工件。<finalName>
和<artifactId>
派生的<version>
)应具有相同的内容。有一些解决方案:
if
中进行评估,以实现不同的运行时行为。你不喜欢那样。if
。if
中评估的text from a resource file。你不喜欢那样。if
评估的command line argument。一种Maven的方式是:
<dependencies>
引入两个profiles并选择其中一种激活方法:
<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的名称。