2011-02-16 67 views
22

在我的pom.xml中,我使用maven-assembly-plugin在运行“mvn clean install”时创建了一个可执行的jar-with-dependencies。 现在它首先创建不可执行的“name-version.jar”,然后创建“name-version-jar-with-dependencies.jar”。只在Maven中创建可执行jar与依赖关系

我可以以某种方式配置pom.xml,以便它不会创建不可执行的JAR文件吗?

目前我使用<appendAssemblyId>假</appendAssemblyId >所以它只是覆盖的第一个文件...

而且我得到几个“......已经加入,退出”的消息。我能以某种方式阻止他们吗?

这是Maven的组装插件定义在我pom.xml

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.2-beta-5</version> 
    <configuration> 
     <appendAssemblyId>false</appendAssemblyId> 
     <archive> 
      <manifest> 
       <mainClass>my.main.class</mainClass> 
      </manifest> 
     </archive> 
     <descriptorRefs> 
      <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
    </configuration> 
    <executions> 
     <execution> 
      <id>make-assembly</id> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 
+0

更改或删除描述符罐-with依赖性。此外,将程序集插件更新到版本2.2,而不是2.2 -... – khmarbaise 2011-02-16 13:01:38

+0

好吧,我更新了版本。但是当我删除descriptorRef消息时:“读取程序集时出错:找不到程序集描述符。” – phil 2011-02-16 13:11:38

回答

0

也许我缺少一些关于你的问题,但下面的代码让我一个可执行的JAR:这是你在找什么?

   <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <version>2.3.1</version> 
       <configuration> 
        <archive> 
          <manifest> 
           <addClasspath>true</addClasspath> 
           <mainClass>some.main.class</mainClass> 
          </manifest> 
        </archive> 
        <finalName>Proj-${project.version}</finalName> 
        <outputDirectory>target</outputDirectory> 
       </configuration> 
     </plugin> 
+2

是的,你错过了,或者我没有明确提到,我需要该可执行jar中的依赖关系。这就是为什么我使用maven-assembly-plugin和jar-with-dependencies设置。 – phil 2011-02-16 17:21:57

1

您可以尝试设置为pom。这将阻止创建default罐子。

<project xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
         http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    ... 
    <packaging>pom</packaging> 
    ... 
</project> 
3

我想我已经想通了如何做到这一点。你必须离开jar,否则你将失去编译器和资源拷贝以及其他一切与构建你需要的jar一起的事情。

我的解决办法涉及基本欺骗行家,所以我想提防的事情是,它很可能在未来的版本这是不行的......

<build> 
    <defaultGoal>install</defaultGoal> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
      </configuration> 
     </plugin> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <configuration> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
       <finalName>dumpster-diver</finalName> 
       <appendAssemblyId>false</appendAssemblyId> 
       <archive> 
        <manifest> 
         <mainClass>DumpsterDiver</mainClass> 
        </manifest> 
       </archive> 
      </configuration> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
    <finalName>${project.artifactId}</finalName> 
</build> 

注意的是,在构建配置上市,maven-assembly-plugin和构建本身的finalName匹配。另请注意<appendAssemblyId>false</appendAssemblyId>。如果你这样做,构建和装配jar的输出文件名将完全匹配。 Maven肯定会提醒你这个问题,但是会把你想要的jar放到你的目标目录中并放到你的本地仓库中。

这里是“MVN全新安装”在这个项目上的输出,以及在目标目录和本地仓库两个罐子罐子-tvf:

$ mvn clean install 
[INFO] Scanning for projects... 
[INFO] ------------------------------------------------------------------------ 
[INFO] Building dumpster-diver 
[INFO] task-segment: [clean, install] 
[INFO] ------------------------------------------------------------------------ 
[INFO] [clean:clean {execution: default-clean}] 
[INFO] Deleting directory <currentDirectory>/target 
[INFO] [resources:resources {execution: default-resources}] 
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! 
[INFO] Copying 1 resource 
[INFO] [compiler:compile {execution: default-compile}] 
[INFO] Compiling 1 source file to <currentDirectory>/target/classes 
[INFO] [resources:testResources {execution: default-testResources}] 
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! 
[INFO] skip non existing resourceDirectory <currentDirectory>/src/test/resources 
[INFO] [compiler:testCompile {execution: default-testCompile}] 
[INFO] No sources to compile 
[INFO] [surefire:test {execution: default-test}] 
[INFO] No tests to run. 
[INFO] [jar:jar {execution: default-jar}] 
[INFO] Building jar: <currentDirectory>/target/dumpster-diver.jar 
[INFO] [assembly:single {execution: default}] 
[INFO] Processing DependencySet (output=) 
[WARNING] Artifact: <groupId>:dumpster-diver:jar:0.1.0-SNAPSHOT references the same file as the assembly destination file. Moving it to a temporary location for inclusion. 
[INFO] Building jar: <currentDirectory>/target/dumpster-diver.jar 
[WARNING] Configuration options: 'appendAssemblyId' is set to false, and 'classifier' is missing. 
Instead of attaching the assembly file: <currentDirectory>/target/dumpster-diver.jar, it will become the file for main project artifact. 
NOTE: If multiple descriptors or descriptor-formats are provided for this project, the value of this file will be non-deterministic! 
[WARNING] Replacing pre-existing project main-artifact file: <currentDirectory>/target/archive-tmp/dumpster-diver.jar 
with assembly file: <currentDirectory>/target/dumpster-diver.jar 
[INFO] [install:install {execution: default-install}] 
[INFO] Installing <currentDirectory>/target/dumpster-diver.jar to /opt/m2repo/<groupId>/dumpster-diver/0.1.0-SNAPSHOT/dumpster-diver-0.1.0-SNAPSHOT.jar 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESSFUL 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 4 seconds 
[INFO] Finished at: Thu Aug 18 13:08:56 EDT 2011 
[INFO] Final Memory: 22M/618M 
[INFO] ------------------------------------------------------------------------ 
[email protected]:<currentDirectory> 
$ jar -tvf ./target/dumpster-diver.jar | grep -i "dump" 
    6831 Thu Aug 18 13:08:54 EDT 2011 DumpsterDiver.class 
    6831 Thu Aug 18 13:08:54 EDT 2011 DumpsterDiver.class 
    0 Thu Aug 18 13:08:56 EDT 2011 META-INF/maven/<groupId>/dumpster-diver/ 
    2580 Thu Aug 18 13:01:46 EDT 2011 META-INF/maven/<groupId>/dumpster-diver/pom.xml 
     126 Thu Aug 18 13:08:54 EDT 2011 META-INF/maven/<groupId>/dumpster-diver/pom.properties 
[email protected]:<currentDirectory> 
$ jar -tvf /opt/m2repo/<groupId>/dumpster-diver/0.1.0-SNAPSHOT/dumpster-diver-0.1.0-SNAPSHOT.jar | grep -i "dump" 
    6831 Thu Aug 18 13:08:54 EDT 2011 DumpsterDiver.class 
    6831 Thu Aug 18 13:08:54 EDT 2011 DumpsterDiver.class 
    0 Thu Aug 18 13:08:56 EDT 2011 META-INF/maven/<groupId>/dumpster-diver/ 
    2580 Thu Aug 18 13:01:46 EDT 2011 META-INF/maven/<groupId>/dumpster-diver/pom.xml 
    126 Thu Aug 18 13:08:54 EDT 2011 META-INF/maven/<groupId>/dumpster-diver/pom.properties 
0

您可以使用此版本下面和编译与此命令:

MVN清洁编译组件:单

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>3.1.0</version> 
       <configuration> 
        <descriptorRefs> 
         <descriptorRef>jar-with-dependencies</descriptorRef> 
        </descriptorRefs> 
        <archive> 
         <manifest> 
          <mainClass>youMainClass</mainClass> 
         </manifest> 
        </archive> 

        <finalName>${artifactId}</finalName> 
        <appendAssemblyId>false</appendAssemblyId> 
       </configuration> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>single</goal> 
         </goals> 
        </execution> 
       </executions> 
     </plugin> 
    </plugins> 
</build> 
相关问题