一个罐子,一个类和主要类来自dependecy jar

时间:2017-06-16 06:18:39

标签: java eclipse maven maven-assembly-plugin onejar

我有一个项目有两个名为 Test1 Test2 的类。

Test1 Test2 都不是主要类。现在我有一个名为 cloudexe.jar 的依赖项,它有一个主类 ClassExecuter 。现在我的问题是我希望 ClassExecuter 作为 test1.jar test2.jar 的主要类。

test1.jar 应仅包含Test1类及其所有依赖项,包括 cloudexe.jar 类似 test2.jar 应仅包含 Test2 类及其所有依赖项,包括 cloudexe.jar

现在当我的包我的pom.xml时,我得到了test1.jar和test2.jar但是我得到的如下所示

Exception in thread "main" java.lang.NoSuchMethodException: com.uber.Test1.main([Ljava.lang.String;)
        at java.lang.Class.getMethod(Class.java:1678)
        at com.simontuffs.onejar.Boot.run(Boot.java:339)
        at com.simontuffs.onejar.Boot.main(Boot.java:166)

我的 pom.xml 在下面给出

<build>
  <plugins>
  <plugin>
    <groupId>com.jolira</groupId>
    <artifactId>onejar-maven-plugin</artifactId>
    <version>1.4.4</version>
    <executions>
      <execution>
        <id>build-first</id>
          <configuration>
            <mainClass>com.uber.Test1</mainClass>
            <attachToBuild>true</attachToBuild>
            <classifier>onejar</classifier>
            <filename>test1.jar</filename>
          </configuration>
          <goals>
            <goal>one-jar</goal>
          </goals>
        </execution>
      <execution>
        <id>build-second</id>
          <configuration>
            <mainClass>com.uber.Test2</mainClass>
            <attachToBuild>true</attachToBuild>
            <classifier>onejar</classifier>
            <filename>test2.jar</filename>
          </configuration>
          <goals>
            <goal>one-jar</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

<pluginRepositories>
  <pluginRepository>
     <id>onejar-maven-plugin.googlecode.com</id>
     <url>http://onejar-maven-plugin.googlecode.com/svn/mavenrepo</url>
  </pluginRepository>
</pluginRepositories>

任何人都可以帮助我

1 个答案:

答案 0 :(得分:1)

您需要父母有2个子项目:

<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">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.example</groupId>
  <artifactId>parent</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <modules>
    <module>test1</module>
    <module>test2</module>
  </modules>

</project>

然后你有2个项目test1和test2项目,他们将生成jar,使用shade pluging让它执行主类ClassExecuter:

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>com.example</groupId>
    <artifactId>parent</artifactId>
    <version>1.0-SNAPSHOT</version>
  </parent>

  <artifactId>test1</artifactId>
  <packaging>jar</packaging>

  <dependencies>
      ... all your dependencies including cloudexe.jar
  </dependencies>

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.0.0</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer
                                        implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <manifestEntries>
                                        <Main-Class>....ClassExecuter</Main-Class>
                                    </manifestEntries>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>

</project>