【问题标题】:Custom Maven plugin for encryption用于加密的自定义 Maven 插件
【发布时间】:2011-04-05 21:44:31
【问题描述】:

我正在将一个 Ant 脚本翻译成 Maven 2,但我遇到了这个问题:Ant 脚本使用一个非常简单的 java 类来加密文件:

<target name="encrypt">
    <java classname="DESEncrypter">
        <classpath>
            <pathelement path="...classpath for this thing..." />
        </classpath>
        <arg line="fileToEncrypt.properties fileEncrypted.properties" />
    </java>
</target>

这个DESEncrypter 是一个编译类,它的源代码不属于我正在转换的项目,但在其他项目中也有类似的使用。可能我必须为此创建一个 maven 插件才能重用,但我现在不想这样做。我的问题是:我将DESEncrypter 类放在哪个目录中以及如何调用它?使用 exec:java 插件,可能吗?我认为加密器不属于srctestresources 目录。

显然,我不想在最终产品中包含加密器类,只包含加密文件。

【问题讨论】:

    标签: java maven-2 ant


    【解决方案1】:

    您可能只想使用 AntRun 插件,它应该可以让您以最少的麻烦完成 Ant 的任何事情。 你需要依赖于你正在使用的类/jar,但是通过给它一个测试范围,或者提供它不会将它打包到你的最终产品中。

    【讨论】:

    • 更优雅:将工件添加为 antrun 插件的插件依赖项
    【解决方案2】:

    我的问题是:我将 DESEncrypter 类放在哪个目录中以及如何调用它?使用 exec:java 插件,可能吗?我认为加密器不属于 src、test 或 resources 目录。

    一个非常简单的解决方案是使用Maven AntRun Plugin。关于加密器的位置,您可以:

    • 将它放在一个单独的模块中,您可以将其声明为插件的依赖项OF(请参阅this example
    • 将其保留在当前模块的源代码树中,并配置Maven JAR Plugin 以使用excludes 将其排除。

    【讨论】:

      【解决方案3】:

      第三个明显的答案(除了 exec:java 和 antrun)是GMaven,它允许您从外部类或从 pom 内联执行 Groovy 代码。因此,如果您只需要一个单行,将其嵌入到您的 pom 中是一种快速简便的实现方式(否则您应该使用外部脚本)。顺便说一句:如果您不了解 groovy:它基本上是带有一些额外语法糖化的 java。

      这是一个示例配置(当然你必须替换你使用的工件和类):

      <plugin>
          <groupId>org.codehaus.groovy.maven</groupId>
          <artifactId>gmaven-plugin</artifactId>
          <dependencies>
              <dependency>
                  <groupId>your.library.com</groupId>
                  <artifactId>your-library</artifactId>
                  <version>1.2.3</version>
              </dependency>
          </dependencies>
          <executions>
              <execution>
                  <phase>process-classes</phase>
                  <!-- Or any other phase -->
                  <goals>
                      <goal>execute</goal>
                  </goals>
                  <configuration>
                      <source><![CDATA[
                      import com.encryption.*;
                      new Encrypter().encrypt(
                          new File(project.build.outputDirectory, 
                                                          'fileToEncrypt.properties'),
                          new File(project.build.outputDirectory, 
                                                          'encryptedFile.properties')
                      )
                      ]]></source>
                  </configuration>
              </execution>
          </executions>
      </plugin>
      

      (通过使加密工件成为插件依赖项,您可以将其排除在部署的依赖项之外,但这也适用于 antrun 和 exec:java)

      【讨论】:

      • 是的,它越来越少了,因为我目前对 AspectJ 很着迷,但我总是不得不回到 GMaven,因为它非常好用和简单 :-)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-10
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-03
      相关资源
      最近更新 更多