除了src/main/java之外,我添加了一个src/bootstrap目录,我希望在我的构建过程中包含该目录,换句话说,我希望maven在我的构建中编译并包含源代码.怎么样!?
我有一个Ant构建,目前正在转换为Maven.但是,Ant构建有2个构建目标 - 一个构建整个应用程序,另一个构建一些JAR(只有少数几个).在Ant中,很容易有多个构建目标来处理这个问题,但我正在尝试确定在Maven中处理这个问题的最佳方法.
我可以将文件子集拆分成第二个项目,它将拥有自己的POM.那么第一个项目可能取决于这个.但是,由于文件的子集非常小(小于10),因此为此创建一个全新的项目似乎有点过分.
还有其他方法可以解决这个问题吗?
我开发了一个Java实用程序库(类似于Apache Commons),我在各种项目中使用它.除了胖客户端,我还将它用于移动客户端(具有J9 Foundation配置文件的PDA).随着时间的推移,作为单个项目启动的库分布在多个包中.因此,我最终得到了许多功能,这在所有项目中并不是真正需要的.
由于这个库也用在一些移动/ PDA项目中,我需要一种方法来收集使用过的类并生成实际的专用jar.
目前在使用此库的项目中,我有Ant jar任务,从(从实用程序项目)生成专用jar文件(例如:my-util-1.0-pda.jar,my-util-1.0-rcp.jar)使用include/exclude jar任务功能.由于生成的jar文件的大小限制,对于移动项目,这通常是需要的.
现在迁移到Maven我只是想知道是否有任何最佳实践可以达到类似的目的.我考虑以下场景:
[1] - 除了主jar工件(my-lib-1.0.jar)之外,还在my-lib项目中使用Maven Jar插件使用分类器(例如:my-lib-1.0-pda.jar)生成单独/专用工件或Maven Assembly Plugin过滤/包含.我对这种方法不太满意,因为它污染了库,消费者需要(过滤器).
[2] - 为所有专门的客户端/项目创建额外的Maven项目,这将"包装""my-lib"并生成过滤的jar工件(例如:my-lib-wrapper-pda-1.0 ......等) .因此,这些包装器项目将包括过滤(以生成过滤的工件),并将仅依赖于"my-lib"项目,客户端项目将依赖于my-lib-wrapper-xxx-1.0而不是my- lib-1.0.这种方法可能看起来有问题,因为即使这样也会让"my-lib"项目完整(没有额外的分类器和工件),基本上会使项目数量增加一倍,因为对于每个客户端项目我都会有一个lib,只是为了收集所需的来自"my-util"库的类("my-pda-app"项目将需要一个"my-lib-wrapper-for-my-pda-app"项目/依赖项).
[3] - 在每个使用该库的客户端项目中(例如:my-pda-app)添加一些专门的Maven插件来修剪(当生成最终的工件/包时)不需要的类(例如:maven-assembly) -plugin,maven-jar-plugin,proguard-maven-plugin).
在"Maven方式"中解决此类问题的最佳实践是什么?
我正在努力让Maven与ProGuard合作.
我想要实现的目标如下:
在我的源文件上运行ProGuard并生成混淆的类
创建一个引用主类的清单文件,以便我可以将其作为jar执行
解压缩所有相关的库jar并创建一个包含它们的巨大jar.此文件只应与.class和.xml文件联系.
将它们组装成包含各种README.txt文件的.zip和tar.gz文件,依此类推.
到目前为止,我有这样的事情:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.2</version>
<configuration>
<archive>
<manifest>
<mainClass>com.class.path.MainClass</mainClass>
</manifest>
</archive>
<includes>
<include>**/*.class</include>
<include>**/*.xml</include>
</includes>
</configuration>
</plugin>
<plugin>
<groupId>com.pyx4me</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<configuration>
<options>
<option>-allowaccessmodification</option>
</options>
<obfuscate>true</obfuscate>
<injar>classes</injar>
<outjar>${project.build.finalName}.jar</outjar>
<outputDirectory>${project.build.directory}</outputDirectory>
<proguardInclude>src/main/assembly/proguard.conf</proguardInclude>
<libs>
lib/rt.jar</lib>
</libs>
</configuration>
<executions>
<execution>
<phase>process-classes</phase>
<goals>
<goal>proguard</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>assembly</id>
<phase>package</phase>
<goals>
<goal>assembly</goal>
</goals>
<configuration>
<descriptors>
<descriptor>
src/main/assembly/bin.xml
</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
但我没有快乐.任何人都可以给我任何模糊的指示吗?
先谢谢,马特