Каковы минимальные банки, необходимые для использования Spring в автономном приложении?

я использую spring в автономном приложении для внедрения зависимостей, MessageSource и PropertyPlaceHolder поддержка, поддержка Hibernate/JDBC, модульное тестирование, и мне было интересно, каковы минимальные jar-файлы, необходимые для вышеуказанных требований, и если я могу исключить некоторые jar-файлы или зависимости из моей текущей конфигурации, поскольку мне не нужно, чтобы размер приложения был большим, так как это отдельное приложение, мне нужно сделать размер приложения как маленький > насколько я могу, вот зависимости, которые я использую прямо сейчас:

<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-oxm</artifactId>
            <version>${spring.version}</version>
        </dependency>       

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-asm</artifactId>  
            <version>${spring.version}</version>  

        </dependency>

ОБНОВЛЕНИЕ:

После минимизации зависимостей до:

  1. пружинный сердечник.
  2. весенние бобы.
  3. весна-контекст.
  4. поддержка весеннего контекста.
  5. весна-выражение.
  6. весна-jdbc.
  7. весенняя форма.
  8. Hibernate-entitymanager.
  9. API проверки.
  10. спящий-валидатор.
  11. июнь.
  12. общее ведение журнала.
  13. slf4j-простой.
  14. журнал4j.
  15. дерби.
  16. cglib.

я все еще вижу некоторые банки, которые я не уверен, важны ли они для моих требований или нет:

  1. активация-1.1.jar
  2. antlr-2.7.6.jar
  3. aopalliance-1.0.jar
  4. asm-3.3.1.jar
  5. Commons-коллекции-3.1.jar
  6. dom4j-1.6.1.jar
  7. javassist-3.9.0.GA.jar
  8. jms-1.1.jar
  9. почта-1.4.jar
  10. весна-аоп-3.0.5.RELEASE.jar
  11. весна-asm-3.0.5.RELEASE.jar
  12. весна-tx-3.0.5.RELEASE.jar
  13. XML-apis-1.0.b2.jar

ПОЖАЛУЙСТА, сообщите, если я должен исключить некоторые банки из них.


person fresh_dev    schedule 24.12.2011    source источник
comment
Поскольку вы используете Maven, почему бы вам не перечислить только свои прямые зависимости и позволить Maven загрузить для вас транзитивные зависимости?   -  person JB Nizet    schedule 25.12.2011
comment
извините, я не так хорош в maven, не могли бы вы объяснить немного больше, что вы имеете в виду?   -  person fresh_dev    schedule 25.12.2011
comment
Просто перечислите зависимости, от которых напрямую зависит ваш код (возможно, spring-jdbc, spring-orm), и Maven будет использовать POM этих артефактов для определения других необходимых артефактов (spring-code, spring-context и т. д.). Он автоматически загрузит их и сделает доступными в пути к классам.   -  person JB Nizet    schedule 25.12.2011
comment
@JB Nizet сделал это, и я думаю, что все еще могу исключить некоторые ненужные банки, см. Мое обновление сообщения.   -  person fresh_dev    schedule 25.12.2011
comment
Я не понимаю: если вы перечисляете банки, которые вы используете напрямую, а Maven вводит необходимые транзитивные зависимости, о чем вы на самом деле спрашиваете? Работает ли Maven?   -  person Dave Newton    schedule 25.12.2011
comment
@ Дэйв Ньютон, вопрос в том, что вы думаете о 13 банках, которые я перечислил, все ли они важны для поддержки DI, Hibernate / JDBC, MessageSource, я могу исключить некоторые из них, чтобы минимизировать банки настолько, насколько я могу   -  person fresh_dev    schedule 25.12.2011
comment
Я думаю, что если Maven заявляет, что они являются транзитивными зависимостями, вы устраняете их на свой страх и риск - вам нужно будет выполнить полный обзор пути кода на основе вашего работающего приложения, чтобы узнать, можно ли их безопасно устранить на основе вашего конкретного использования. из непосредственных зависимостей.   -  person Dave Newton    schedule 25.12.2011


Ответы (1)


Возможно, некоторые транзитивные зависимости не используются, но автоматизированного способа определить это нет. Вы можете исключить все транзитивные зависимости для начала (используя тег excludes), собрать/запустить приложение и продолжать добавлять соответствующие зависимости, когда вы получаете сообщение об ошибке. Некоторые из них не смогут компилироваться, другие не смогут выполнить приложение во время выполнения.

person Raghuram    schedule 25.12.2011