用IntelliJ& amp; amp; amp;行家

时间:2014-04-21 15:00:30

标签: maven jar intellij-idea maven-2

我正在构建可执行JAR文件的人希望所有外部需要的库位于单独的lib/目录中,该目录在运行我的JAR时将位于其当前工作目录中。他还要求我将log4j.xmlconfig.properties文件从JAR中取出,以便他可以编辑它们的值。如何使用IntelliJ和maven构建具有此类清单的JAR?

1 个答案:

答案 0 :(得分:2)

这可以通过一些Maven插件来完成。

要将所有dependencies放入其他文件夹,请使用maven-dependency-plugin。此示例将它们放在target/lib文件夹中。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-dependency-plugin</artifactId>
  <version>2.5.1</version>
  <executions>
    <execution>
      <id>copy-dependencies</id>
      <phase>package</phase>
      <goals>
        <goal>copy-dependencies</goal>
      </goals>
      <configuration>
        <outputDirectory>${project.build.directory}/lib/</outputDirectory>
      </configuration>
    </execution>
  </executions>
</plugin>

要将指定的resources放入其他文件夹,请使用maven-resources-plugin

<plugin>
  <artifactId>maven-resources-plugin</artifactId>
  <version>2.6</version>
  <executions>
    <execution>
      <id>copy-resources</id>
      <phase>package</phase>
      <goals>
        <goal>copy-resources</goal>
      </goals>
      <configuration>                    
        <outputDirectory>${project.build.directory}/conf</outputDirectory>
        <resources>
          <resource>
            <directory>src/main/resources/</directory>
            <includes>
              <include>log4j.xml</include>
              <include>config.properties</include>
            </includes>
          </resource>
        </resources>
      </configuration>
    </execution>
  </executions>
</plugin>

最后,您需要使用maven-jar-plugin执行以下操作:

  1. 从jar中排除资源
  2. 引用jar清单
  3. 中lib文件夹中的所有依赖项
  4. 引用jar清单中conf文件夹中的资源
  5. 以下内容应该有效:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.4</version>
        <executions>
            <execution>
                <phase>package</phase>
                <goals>
                    <goal>jar</goal>
                </goals>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>foo.bar.Main</mainClass>
                            <classpathPrefix>lib/</classpathPrefix>
                        </manifest>
                        <manifestEntries>
                            <Class-Path>conf/</Class-Path>
                        </manifestEntries>
                    </archive>
                    <classifier>jar-without-resources</classifier>
                    <excludes>
                        <exclude>log4j.properties</exclude>
                        <exclude>config.properties</exclude>
                    </excludes>                
                </configuration>
            </execution>
        </executions>
    </plugin>
    

    希望这有帮助,

    威尔